数据结构:二叉树的深度与叶子节点数

输入二叉树的先序序列,计算并输出该二叉树的深度与叶子节点个数。请将代码填写完整。

例如,下面二叉树对应的先序序列为“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;
}

猜你喜欢

转载自blog.csdn.net/weixin_41676901/article/details/81944493