二叉树基本概念
树是复杂的非线性结构,二叉树是其中的一种特殊的树。二叉树的非跟节点有且仅有一个父亲节点,所有节点最多有两个子节点。
本文先是使用递归的方法将用户输入的数组用递归的方法生成一个二叉树,在对这个二叉树实现二叉树的基本操作——先序遍历,
中序遍历,后续遍历,层次遍历,求树深的基本操作。
基本操作的实现
二叉树的构建
先录入输入的数组到数组a中,再根据树中的位置和数值位置的对应关系来构建二叉树。其中999表示空节点。
//初始化树节点
Tree* initTree(){
Tree *T;
T = (Tree*)malloc(sizeof(Tree)); //分配空间
T->data = 999;
T->lchild = NULL;
T->rchild = NULL;
return T;
}
Tree* buildTree(){
Tree* T = initTree(); //树的根结点
int h; //存储树高
ElemType* a; //存储输入的数
printf("输入数的高度:");
scanf("%d",&h);
if(h<1){
printf("高度参数非法");
}else{
a = scanfall(h);
if(h==1){
T->data = a[1];
}else{
T->data = a[1];
buildTree_1(T,a,1,h);
}
}
return T;
}
//读取输入的数的信息
ElemType* scanfall(int h){
int n = pow(2,h); //计算最大节点个数
printf("\n请按照层次输入二叉树的%d各元素,空用999表示\n",n-1);
ElemType *a;
a = (ElemType*)malloc(sizeof(ElemType)*n);
int i = 1;
int item;
while(i<n){
printf("请输入元素:");
scanf("%d",&item);
a[i++] = item;
}
return a;
}
//递归方式构建树
int buildTree_1(Tree *T,ElemType *a,int s,int h){
//节点非空时创建节点并接在树上
if(a[2*s]==999){
//return 0;
}else{
Tree *p = initTree();
p->data = a[2*
本文介绍了如何使用递归方法从用户输入的数组构建二叉树,并详细阐述了二叉树的先序、中序、后序遍历以及层次遍历的操作,同时提供了计算树高的方法和完整的测试用例。
最低0.47元/天 解锁文章
1172

被折叠的 条评论
为什么被折叠?



