二叉树的最大宽度和高度

来源:互联网 发布:国家网络应急中心招聘 编辑:程序博客网 时间:2024/05/21 15:43
题目描述 Description

    给出一个二叉树,输出它的最大宽度和高度。

输入描述 Input Description

  第一行一个整数n。

  下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。

输出描述 Output Description

  输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。

样例输入 Sample Input

5

2 3

4 5

0 0

0 0

0 0

样例输出 Sample Output

2 3

数据范围及提示 Data Size & Hint

n<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;}

0 0
原创粉丝点击