请各位帮我看看为什么下面的二叉树程序,当我输入的e为左结点时,程序运行会出错,谢谢!
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNOde{
int data;
struct BiTNOde *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T); //创建二叉树函数
void PreOrderTraverse(BiTree T); //先序遍历
BiTree LeftSibling(BiTree T,int e); //查找结点e的左兄弟
int main()
{
BiTree T=NULL,p=NULL;
int e;
CreateBiTree(T);
PreOrderTraverse(T);
printf("null\n");
printf("Please input search left sibling e::");
scanf("%d",&e);
p=LeftSibling(T,e); //找E的左兄弟函数
if(p)
printf("%d LeftSibling=%d\n",e,p->data);
else
printf("%d has no LeftSibling.\n",e);
return 0;
}
void CreateBiTree(BiTree &T)
{
int value;
scanf("%d",&value);
if(value==0) //0代表空树
T=NULL;
else
{
if((T=(BiTree)malloc(sizeof(BiTNode)))==NULL)
{
exit(1);
}
T->data=value;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T)
{
if(T)
{
printf("%d->",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
BiTree LeftSibling(BiTree T,int e)
{
BiTree p=NULL;
if(T==NULL)
return NULL;
else
{
if(T)
{
if(T->rchild->data==e) //当某结点的右孩子等于E时
{
if(T->lchild) //如果左孩子成立,则返回左孩子
return T->lchild;
else
return NULL;
}
}
p=LeftSibling(T->lchild,e);
if(p)
return p;
p=LeftSibling(T->rchild,e);
if(p)
return p;
}
return NULL;
}