CODEVS 1501二叉樹最大寬度和高度
阿新 • • 發佈:2017-05-14
它的 logs nbsp 二叉 ace 最小寬度 最大 -h blog
題目描述 Description
給出一個二叉樹,輸出它的最大寬度和高度。
輸入描述 Input Description第一行一個整數n。
下面n行每行有兩個數,對於第i行的兩個數,代表編號為i的節點所連接的兩個左右兒子的編號。如果沒有某個兒子為空,則為0。
輸出描述 Output Description輸出共一行,輸出二叉樹的最大寬度和高度,用一個空格隔開。
樣例輸入 Sample Input5
2 3
4 5
0 0
0 0
0 0
樣例輸出 Sample Output2 3
數據範圍及提示 Data Size & Hintn<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二叉樹最大寬度和高度