输入二叉树的先序序列,计算并输出该二叉树的深度与叶子节点个数。请将代码填写完整。
例如,下面二叉树对应的先序序列为“AB#D##C##"。
A
/ \
B C
\
D
输入
叉树对应的先序序列为。
输出
二叉树的深度与叶子节点个数。
样例输入
AB#D##C##
样例输出
3 2
分析:
这道题只需要知道什么是树的深度和叶子节点数就行。
树的深度是从根点到叶子节点的结点数,叶子节点是没有左右孩子的结点。
代码详解:
#include<iostream>
using namespace std;
//结点结构体
struct Tree
{
char data;
Tree *lchild;
Tree *rchild;
};
int num = 0;
void createTree(Tree *T)//创建二叉树
{
char ch;
cin >> ch;
if (ch == '#')
T->data = NULL;
else
{
T->data = ch;
Tree *TL = new Tree();
T->lchild = TL;
Tree *TR = new Tree();
T->rchild = TR;
createTree(T->lchild);
createTree(T->rchild);
}
}
//树的深度
int TreeDepth(Tree *T)
{
int i, j;
if (!T)
return 0;
if (T->lchild->data != NULL)
i = TreeDepth(T->lchild);
else
i = 0;
if (T->rchild->data != NULL)
j = TreeDepth(T->rchild);
else
j = 0;
return i > j ? i + 1 : j + 1;
}
//叶子节点数
void CountLeaf(Tree *T)
{
if (T->data==NULL)
return ;
if (T->lchild->data == NULL&&T->rchild->data == NULL)//左右孩子都为空的就计数
num++;
CountLeaf(T->lchild);
CountLeaf(T->rchild);
return ;
}
int main()
{
Tree *T;
T = new Tree();
createTree(T);
int TT = TreeDepth(T);
CountLeaf(T);
cout << TT << " " << num << endl;
return 0;
}