(1)创建二叉树
(2)求深度
(3)求总结点数
(4)求叶子结点数
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;
node *lchild,*rchild;
}node,*BiTree; //指向node类型的指针变量
void visit(char ch)
{
printf(" %c ",ch);
}
void CreateBiTree(BiTree &T) //这里采用引用类型,对此函数T的修改就是对主函数里的BiTree类型指针的修改
{
char ch;
ch=getchar();
getchar();
if(ch=='#')
T=NULL;
else
{
T=new node();
T->data=ch;
printf("输入左子树:\n");
CreateBiTree(T->lchild);
printf("输入右子树:\n");
CreateBiTree(T->rchild);
}
}
void PreOrder(BiTree T)
{
if(T)
{
visit(T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
else
{
printf(" # ");
}
}
void Copy(BiTree T,BiTree &newT) //将二叉树复制到二叉树newT里面
{
if(T==NULL) //递归终止条件
newT=NULL;
else
{
newT=new node();
newT->data=T->data;
Copy(T->lchild,newT->lchild);
Copy(T->rchild,newT->rchild);
}
}
int Depth(BiTree T)
{
if(T==NULL)
return 0;
else
{
int m,n;
m=Depth(T->lchild);
n=Depth(T->rchild);
printf("m=%d n=%d\n",m,n);
if(m>n)
return (m+1);
else
return (n+1);
}
}
int NodeCount(BiTree T)
{
if(T==NULL)
return 0;
else
{
return (NodeCount(T->lchild)+NodeCount(T->rchild)+1);
}
}
int LeafCount(BiTree T)
{
if(T== NULL)
return 0;
else
{
if(T->lchild==NULL && T->rchild==NULL)
return 1;
else
{
return (LeafCount(T->lchild)+LeafCount(T->rchild));
}
}
}
int main()
{
BiTree T,newT;
printf("创建:\n");
CreateBiTree(T);
printf("先序:\n");
PreOrder(T);
printf("\n");
printf("复制的树:\n");
Copy(T,newT);
PreOrder(newT);
printf("\n");
printf("深度:%d,结点数:%d,叶子结点数:%d\n",Depth(T),NodeCount(T),LeafCount(T));
return 0;
}
结果截图:
创建:
遍历:
对于 求深度模块,专门设置输出函数,输出m,n从尾到头的值:
最终完整输出结果: