您的位置:首页 > 其它

二叉树的最大宽度和高度

2017-02-15 13:15 281 查看
题目描述 Description    给出一个二叉树,输出它的最大宽度和高度。输入描述 Input Description  第一行一个整数n。  下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。输出描述 Output Description  输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。样例输入 Sample Input52 34 50 00 00 0样例输出 Sample Output2 3数据范围及提示 Data Size & Hintn<16默认第一个是根节点以输入的次序为编号2-N+1行指的是这个节点的左孩子和右孩子注意:第二题有极端数据!          1          0 0//树的DFS
#include<iostream>
using namespace std;
int ch[17][2];
int width[1000];//用来记录每一层的宽度
int x=0,deep=0,height=0;//deep用来记录当前高度,height用来记录最大高度
void dfs(int i,int deep)	//i为当前节点编号,deep为当前节点深度
{
if(deep>height)
height=deep;
width[deep]++;
if(ch[i][0])			//ch[i][0]为当前节点左子树 						     i
dfs(ch[i][0],deep+1);							//				   / 	\
if(ch[i][1])			//ch[i][1]为当前节点右子树 				            ch[i][0]  ch[i][1]
dfs(ch[i][1],deep+1);
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>ch[i][0]>>ch[i][1];
dfs(1,1);
for(int i=1;i<=1000;i++)	//找出最大宽度
{
if(width[i]>x)
x=width[i];
}
cout<<x<<" "<<height;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: