C++二叉树的先中后输出求深度叶子结点数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#define OK 1
#define ERROR 0
typedef int Status;
typedef char ElemType;
#include
using namespace std;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*Bitree;
Status CreatBitree(Bitree &T)
{
ElemType ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=(Bitree)malloc(sizeof(BiTNode));
if(!T)
{
cout<<"获取内存失败"<exit(ERROR);
}
T->data=ch;
CreatBitree(T->lchild);
CreatBitree(T->rchild);
}
return OK;
}
Status output1(Bitree &T)
{
if(T)
{
cout<data<<" ";
output1(T->lchild);
output1(T->rchild);
}
return OK;
}
Status output2(Bitree &T)
{
if(T)
{
output2(T->lchild);
cout<data<<" ";
output2(T->rchild);
}
return OK;
}
Status output3(Bitree &T)
{
if(T)
{
output3(T->lchild);
output3(T->rchild);
cout<data<<" ";
}
return OK;
}
Status FindTreeDeep(Bitree T)
{
int deep=0;
if(T)
{
int lchilddeep=FindTreeDeep(T->lchild);
int rchilddeep=FindTreeDeep(T->rchild);
deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;
}
return deep;
}
Status findleaf(Bitree T)
{
if(T==NULL)
return ERROR;
if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
return findleaf(T->lchild)+findleaf(T->rchild);
}
int findnode(Bitree T,int &num)
{
if(T==NULL)
return ERROR;
else
{
num++;
findnode(T->lchild,num)+findnode(T->rchild,num);
}
}
Status main()
{
Bitree T;
int num=0;
cout<<"先序输入二叉树以输入#表示空结点"<CreatBitree(T);
cout<<"输出二叉树(先序)"<output1(T);
cout<cout<<"输出二叉树(中序)"<output2(T);
cout<cout<<"输出二叉树(后序)"<output3(T);
cout<cout<<"深度为:"<< FindTreeDeep(T)<cout<<"叶子数为"<findnode(T,num);
cout<<"结点数为:"<return OK;
}

相关文档
最新文档