#include<iostream>
using namespace std;
typedef struct BiTreeNode{
char data;
BiTreeNode *lChild;
BiTreeNode *rChild;
}BiTreeNode;
int leafCount;
//递归建立二叉树
void InitialBiTree(BiTreeNode *&node)
{
char data;
cout<<"请输入数据,输入#结束"<<endl;
cin>>data;
if(data!='#')
{
node=(BiTreeNode*)malloc(sizeof(BiTreeNode));
if(node==NULL)return;
node->data=data;
InitialBiTree(node->lChild);
InitialBiTree(node->rChild);
}
else
{
node=NULL;
}
}
//先序遍历
void TransFirstBiTree(BiTreeNode *&root)//注意使用*&root,^-^搞得有点郁闷反正就是这样root才可以保住
{
if(root==NULL)return;
else
{
cout<<root->data<<" ";
TransFirstBiTree(root->lChild);
TransFirstBiTree(root->rChild);
}
}
//叶结点基数
void CountLeafNode(BiTreeNode *&root)
{
if(root!=NULL)
{
if(root->lChild==NULL&&root->rChild==NULL)
leafCount++;
CountLeafNode(root->lChild);
CountLeafNode(root->rChild);
}
else
{
return ;
}
}
//递归求二叉树的深度,max=hl>hr?hl:hr;max+=1;(递归定义)
int PostTreeDepth(BiTreeNode *&root)
{
int hl,hr,max;
if(root!=NULL)
{
hl=PostTreeDepth(root->lChild);
hr=PostTreeDepth(root->rChild);
max=hl>hr?hl:hr;
return (max+1);
}
else
return 0;
}
int main()
{
char cmd;
do{
leafCount=0;
BiTreeNode *root=NULL;
InitialBiTree(root);
cout<<"先序遍历\n";
TransFirstBiTree(root);
cout<<"\n";
cout<<"\n";CountLeafNode(root);
cout<<"叶结点数目为\n";
cout<<leafCount<<endl;
cout<<"树的深度为\n";
cout<<PostTreeDepth(root)<<endl;
cout<<"继续吗?y or n\n";
cin>>cmd;
}while(cmd=='y');
return 0;
}
递归求二叉树的叶子结点数及深度
最新推荐文章于 2023-04-24 20:21:24 发布
本文介绍了一个二叉树的操作实例,包括二叉树的创建、先序遍历、叶子节点计数及深度计算等基本操作,并提供了完整的C++代码实现。
1519

被折叠的 条评论
为什么被折叠?



