#include
#include
#defineOK1
#defineERROR0
typedefcharElem;
typedefenumPointerTag{Link,Thread};//Link==0:指针,Thread==1:线索
typedefstructNode{
Elemdata;
structNode*pLchild,*pRchild;
PointerTagLTag,RTag;
}BTreeNode,*BTree;
BTreeCreateBTree(BTreeT)//创建二叉树
{
Elemx;
scanf("%c",&x);
if('0'==x)
{
T=NULL;
}
else
{
T=(BTree)malloc(sizeof(BTreeNode));
T->data=x;
T->pLchild=CreateBTree(T->pLchild);
T->pRchild=CreateBTree(T->pRchild);
}
returnT;
}
voidPostTraverseBTree(BTreeT)//后序
{
if(NULL!=T)
{
PostTraverseBTree(T->pLchild);
PostTraverseBTree(T->pRchild);
printf("%c",T->data);
}
}
voidInTraverseBTree(BTreeT)//中序
{
if(NULL!=T)
{
InTraverseBTree(T->pLchild);
printf("%c",T->data);
InTraverseBTree(T->pRchild);
}
}
voidPreTraverseBTree(BTreeT)//前序
{
if(NULL!=T)
{
printf("%c",T->data);
PreTraverseBTree(T->pLchild);
PreTraverseBTree(T->pRchild);
}
}
intCountLeaf(BTreeT)//叶子节点数
{
if(T==NULL)
return0;
elseif(T->pLchild==NULL&&T->pRchild==NULL)
return1;
else
returnCountLeaf(T->pLchild)+CountLeaf(T->pRchild);
}
intDepth(BTreeT)//深度
{
intdepthval;
if(!T)
return0;
intdepthLeft=Depth(T->pLchild);
intdepthRight=Depth(T->pRchild);
depthval=1+max(depthLeft,depthRight);
returndepthval;
}
intmain(void)
{
BTreeT=NULL;printf("请输入二叉树元素:\n");
T=CreateBTree(T);
printf("\n\n");
printf("先序遍历:\n");
PreTraverseBTree(T);
printf("\n\n");
printf("中序遍历:\n");
InTraverseBTree(T);
printf("\n\n");
printf("后序遍历:\n");
PostTraverseBTree(T);
printf("\n\n");
printf("叶子节点数:\n");
CountLeaf(T);
printf("\n\n");
printf("深度:\n");
Depth(T);
printf("\n\n");
return0;
}
分 -->
|