主题:二叉树的基本操作,帮忙看看!调试不出来
//-------二叉树的基本操作-----
Status CreateBiTree(BiTree T)
{//先序序列创建一棵二叉树
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{T=(BiTree)malloc(sizeof(BiTNode));
if(!T) return ERROR;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T)
{//二叉树的先序遍历
if(T)
{printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{////二叉树的中序遍历
if(T)
{InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{//二叉树的后序遍历
if(T)
{PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
int CountLeaf(BiTree T)
{//计算二叉树的叶子结点数
int m,n;
if(T==NULL) return 0;
else if(!T->lchild&& !T->rchild) return 1;
else
{m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return(m+n);
}
}
int BiTreeDepth(BiTree T)
{//计算二叉树的深度
int depthval,ldepthval,rdepthval;
if(!T) depthval=0;
else if(!T->lchild && !T->rchild) depthval=1;
else
{ldepthval=BiTreeDepth(T->lchild);
rdepthval=BiTreeDepth(T->rchild);
depthval=ldepthval>rdepthval?ldepthval:rdepthval+1;
}
return depthval;
}
main()
{BiTree T;
printf("请输入创建一棵二叉树的先序序列:");
CreateBiTree(T);
printf("先序序列为:");
PreOrderTraverse(T);
printf("\n中序序列为:");
InOrderTraverse(T);
printf("\n后序序列为:");
PostOrderTraverse(T);
printf("二叉树所含叶子结点数为:%d",CountLeaf(T));
printf("\n二叉树的深度为:%d\n",BiTreeDepth(T));
}
Status CreateBiTree(BiTree T)
{//先序序列创建一棵二叉树
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{T=(BiTree)malloc(sizeof(BiTNode));
if(!T) return ERROR;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
void PreOrderTraverse(BiTree T)
{//二叉树的先序遍历
if(T)
{printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{////二叉树的中序遍历
if(T)
{InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{//二叉树的后序遍历
if(T)
{PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
int CountLeaf(BiTree T)
{//计算二叉树的叶子结点数
int m,n;
if(T==NULL) return 0;
else if(!T->lchild&& !T->rchild) return 1;
else
{m=CountLeaf(T->lchild);
n=CountLeaf(T->rchild);
return(m+n);
}
}
int BiTreeDepth(BiTree T)
{//计算二叉树的深度
int depthval,ldepthval,rdepthval;
if(!T) depthval=0;
else if(!T->lchild && !T->rchild) depthval=1;
else
{ldepthval=BiTreeDepth(T->lchild);
rdepthval=BiTreeDepth(T->rchild);
depthval=ldepthval>rdepthval?ldepthval:rdepthval+1;
}
return depthval;
}
main()
{BiTree T;
printf("请输入创建一棵二叉树的先序序列:");
CreateBiTree(T);
printf("先序序列为:");
PreOrderTraverse(T);
printf("\n中序序列为:");
InOrderTraverse(T);
printf("\n后序序列为:");
PostOrderTraverse(T);
printf("二叉树所含叶子结点数为:%d",CountLeaf(T));
printf("\n二叉树的深度为:%d\n",BiTreeDepth(T));
}