欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二叉树的建立(C语言)

程序员文章站 2024-01-16 23:00:16
...

二叉树长这样的;
二叉树的建立(C语言)

#include<stdio.h>
#include<stdlib.h>

typedef struct BiTNode{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建一个二叉树,按照前序遍历的输入方式输入数据
BiTree CreateBiTree(){
	BiTree T;
	char c;
	scanf("%c",&c);
	if('#'==c){
		 T=NULL;
	}
	else{
		T=(BiTree)malloc(sizeof(BiTNode));
		T->data=c;
		T->lchild=CreateBiTree();
		T->rchild=CreateBiTree();
	}
	return T;
}


//访问二叉树结点的具体操作
visit(char data,int level){
	printf("%c位于第%d层\n",data,level);

}
//遍历二叉树,前序遍历法并输出每个节点所在的层数
PreOrderTraverse(BiTree T,int level){
	if(T){
		visit(T->data,level);
		//printf("%c\n",T->data);
		PreOrderTraverse(T->lchild,level+1);
		PreOrderTraverse(T->rchild,level+1);
	}
}
int main(){
	int level;
	BiTree T;
	level=1;
	T=CreateBiTree();
	PreOrderTraverse(T,level);
	return 0;
}

输入的时候先把叶子结点用#全,
变成这样下面这样的图(忽略这么丑,就大概这样的),再按照前序遍历次序输出各节点的值
二叉树的建立(C语言)
求结点所在的层数,运行结果如图:
二叉树的建立(C语言)
刚开始创建二叉树的方法不是上述那样写的,我觉得正确的啊,不知道为什么就是不输出,有看出哪里错的了可以告诉我,方法是这样的:

void CreateBiTree(BiTree T){//这里没用&,我看有的代码用了&,在我的编译器上,用了反而报错
	BiTree T;
	char c;
	scanf("%c",&c);
	if('#'==c){
		 T=NULL;
	}
	else{
		T=(BiTree)malloc(sizeof(BiTNode));
		T->data=c;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}

------更求二叉树高度的方法(递归法):----------------

int Height(BiTree T)
{	
	int h1,h2,h;
	if( T == NULL )           //空树,返回0 
	    return 0;
	if( T->lchild == NULL && T->rchild == NULL )  //只有树根结点返回1 
	    return 1;
	h1=Height(T->lchild);
	h2=Height(T->rchild); 
	h=h1>h2?h1:h2;
	return h+1;//树的高度 = MAX(左子树的高度,右子树的高度) + 1;
} 
相关标签: 数据结构+C