关于网友提出的“ 求教,二叉链表创建二叉树总有问题,谢谢”问题疑问,本网通过在网上对“ 求教,二叉链表创建二叉树总有问题,谢谢”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求教,二叉链表创建二叉树总有问题,谢谢描述:
typedef int TElemType;
typedef int Status;
//二叉树结构体
typedef struct BiTNode
{ TElemType data;//结点的值
BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InitBiTree(BiTree &T)
{ T=NULL;
}
TElemType Root(BiTree T)
{ //返回二叉树的根结点
if(BiTreeEmpty(T))
return NULL;
else
return T->data;
}
void CreateBiTree(BiTree &T) //利用这个函数创建的二叉树每个结点为什么只有左子树呢,而没有右子树呢??
{ TElemType ch;
scanf("%d",&ch);//输入结点的值
if(ch==0)//结点为空
T=NULL;
else
{T=(BiTree)malloc(sizeof(BiTNode));
//生成根结点
if(!T)
exit(OVERFLOW);
T->data=ch;//将值赋给T所指结点
CreateBiTree(T->lchild);//递归构造左子树
CreateBiTree(T->rchild);
}
}
main()
{ int i;
BiTree T,p,c;
TElemType e1,e2,e3;
InitBiTree(T);//初始化二叉树CreateBiTree(T);//建立二叉树T
printf("构造二叉树后,树空否?%d(1,是,0否).树的深度=%d.\n",BiTreeEmpty(T),BiTreeDepth(T));
e1=Root(T);//e1为二叉树T的根结点的值
e2=LeftChild(T,e1);
printf("左孩子:%d",e2);
e3=RightChild(T,e1);
printf("右孩子:%d",e3);
}
解决方案1:
理解错了~~~~~~
解决方案2:晕,第一个图片没传好

你的二叉树创建的没有问题 可能你不知道怎么输入
比如对于这样的二叉树,你应该这样输入
2 3 5 9 0 0 0 1 0 0 4 7 0 0 2 0 0
可能你不太理解二叉树的建立过程,看看这个
是不是程序里创建完左子树后
if(!T)
exit(OVERFLOW);
就退出了