問題描述:
現在有一棵合法的二叉樹,樹的節點都是用數字表示,現在給定這棵樹上所有的父子關係,求這棵樹的高度
輸入描述:
輸入的第一行表示節點的個數n(1 ≤ n ≤ 1000,節點的編號為0到n-1)組成,
下面是n-1行,每行有兩個整數,第乙個數表示父節點的編號,第二個數表示子節點的編號
輸出描述:
輸出樹的高度,為乙個整數
示例1
輸入5
0 1
0 2
1 3
1 4 輸出3
解題思路:
思路一:根據題目要求,依據父子關係建立一顆合法的二叉樹,然後再利用遞迴得出樹的高度。
但是再測試用例時有的用例會使用多叉樹,這個演算法不適用。而且多叉樹在進行運算時,只能取前面兩個分支,要忽略後面的分支。
源**:
/*建立二叉樹求解問題*/
#includeusing namespace std;
typedef struct node
bitree,*linktree;
int flag; //判斷函式遞迴是否結束
//求樹的高度
int gettreeheight(linktree rootnode)
//依據節點建樹
void creattree(linktree root,int father,int childval)
else //否則則建立右子樹,因為合法,故非左即右
return;
}if(flag==0) //設定標記,防止無限呼叫迴圈,而且會減少函式呼叫的次數
else return;
}int main()
//coutvalval<
核心**:
/*父節點的深度加一就是子節點的深度,從0開始一次往下遍歷*/
/*0的深度為1,一次以此為基礎向下遍歷,則可得到最終深度 */
#include#include#include#includeusing namespace std;
int main()
; vector> count; //to creat a array
cin>>n;
for(int i=0;imiddleuse;
cin>>temp;
middleuse.push_back(temp);
cin>>temp;
middleuse.push_back(temp);
count.push_back(middleuse); //input the array
} sort(count.begin(),count.end()); //sort to calculate
//for(int i=0;i此為兩種兩種計算深度的方式,其中第一種思路適用於所有已經建立的樹,第二種適合與這種節點的關係來求深度。
2014哈爾濱小公尺筆試題
今年小公尺的筆試共三道大題,時間90分鐘 第一道 輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於所有偶數的前面,例如輸入的陣列為,調整後的陣列 是一種滿足條件的方案。函式的頭部已經寫好,無返回值,有兩個引數,乙個是陣列指標,另乙個是該陣列的長度。我的解答思路是使用兩個偽指標,乙個指向陣列的...
2014哈爾濱小公尺筆試題
今年小公尺的筆試共三道大題,時間90分鐘 第一道 輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於所有偶數的前面,例如輸入的陣列為,調整後的陣列 是一種滿足條件的方案。函式的頭部已經寫好,無返回值,有兩個引數,乙個是陣列指標,另乙個是該陣列的長度。我的解答思路是使用兩個偽指標,乙個指向陣列的...
小公尺筆試題 求異數
輸入2 16進製制內的數,返回其中值不相同的。輸入 輸入數值串行行 0輸入樣例 10 15 4 32 4 33 8 17 end輸出樣例 4 32 問題分析 將輸入解析。得出結果並輸出。初步程式如下 public static void main string args char arr str.t...