1. 程式人生 > >CODEVS 1501二叉樹最大寬度和高度

CODEVS 1501二叉樹最大寬度和高度

它的 logs nbsp 二叉 ace 最小寬度 最大 -h blog

題目描述 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

這題你們別想投機取巧了,給我老老實實搜索!

代碼:

 1 #include<iostream>
 2 using namespace std;
 3 int n,a,maxh=1,maxw=1;
 4 //這裏要把最小寬度和深度初始為1,有一個坑點是樹上只有一個根節點,此時不會執行循環語句的操作
 5 int hei[200],wid[200];//表示當前節點所在層的高度和寬度 
 6 int main()
 7 {
 8     cin>>n;
9 hei[1]=1;//根節點在第一層,其高度為1 10 for(int i=1;i<=n;i++) 11 for(int j=1;j<=2;j++) 12 { 13 cin>>a; 14 if(a) 15 { 16 hei[a]=hei[i]+1;//所加入的節點高度比其父節點大1 17 if(hei[a]>maxh)maxh=hei[a]; 18 wid[hei[a]]++;//
每加一個節點節點所在層的寬度+1 19 if(wid[hei[a]]>=maxw)maxw=wid[hei[a]]; 20 } 21 } 22 cout<<maxw<<" "<<maxh; 23 return 0; 24 }

CODEVS 1501二叉樹最大寬度和高度