阿里一道面試題 完全二叉樹的最後一顆節點

2021-06-29 08:15:57 字數 800 閱讀 2340

今天和朋友聊天,說是阿里有道面試題。

已知一顆完全二叉樹,有n個節點 求最後乙個節點,亦即最後一排最右邊的那個節點。

節點數目2^0+……2^(k-1)>=n >= 2^0+2^1+2^2+2^3……2^k

那麼樹深為k+1,最後個節點在最後層為第(n-2^0+……2^(k-1))個

如果(n-2^0+……2^k-1)>2^k/2,那麼在右子樹,右子樹有n-2^(k-1)個節點,;

如果(n-2^0+……2^k-1)<=2^k/2,那麼在左子樹

從根節點出發,首先要判斷是在右子樹里還是在左子樹里。要明確一點已知節點數目n,那麼我們是可以判斷最後乙個節點是在第幾排,第幾個。如上n=15,那麼是在第4排的第8個節點。而8 > 4(這裡判斷是在右子樹還是左子樹)。

現在我們從節點c作為根節點的子樹,按照上面的方法,最後找到該節點。

逆向思維:

我們將所有節點標號,從1~n,那麼n節點就是我們要求的節點。那麼n節點的父節點為n/2,其為(n%2==1)?右節點:左節點。

以上圖舉例:

15 % 2 = 1 ——————所以走右邊

15/2 = 7

7 % 2 = 1——————所以走右邊

7/2 = 3

3 % 2 = 1——————所以走右邊

1 / 2 = 0——————結束

上述15為節點數,大家可以試試看,是否正確。其實這個方法也是可以從上面那種方法歸納出來。

關於完全二叉樹的一道面試題

存在一棵完全二叉樹,從鍵盤輸入一組資料,並將資料從二叉樹的根結點順序存入每個結點 輸出從根結點到葉結點最大的路徑長度。輸入第一行為完全二叉樹的結點數 n。輸入第二行為對應的的所有整數,用空格隔開。輸出最大的路徑長度 輸入 7 5 4 3 10 5 9 2 輸出 19 1 該題目實際上是有一定難度的,...

二叉樹面試題

1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...

面試題 二叉樹

面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...