小公尺筆試題 依據父子關係建樹

2021-08-11 09:16:33 字數 1543 閱讀 8266

問題描述:

現在有一棵合法的二叉樹,樹的節點都是用數字表示,現在給定這棵樹上所有的父子關係,求這棵樹的高度 

輸入描述: 

輸入的第一行表示節點的個數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...