天天看點

二叉樹的常見面試題

1.求完全二叉樹的節點數 時間複雜度小于O(N)

給定一棵完全二叉樹的根節點root,傳回這棵樹的節點個數。如果完全二叉樹的節點數為N,請實作時間複雜度低于O(N)的解法。給定樹的根結點root,請傳回樹的大小。

思路:

1 找到完全二叉樹的最左節點,也就是求左子樹的深度

2 找到完全二叉樹頭節點右子樹中的最左節點,記錄右子樹深度

3 如果兩個深度相等,說明頭節點左子樹是一棵滿二叉樹,使用公式求得左子樹的節點個數再加上頭節點,然後對于右子樹使用遞歸求解

4 如果左子樹深度大于右子樹深度,說明右子樹是一棵完全二叉樹,使用公式求得右子樹的節點個數再加上頭節點,然後對于左子樹使用遞歸求解.

源代碼如下:

二叉樹的常見面試題

2.java實作遞歸和非遞歸求二叉樹深度

一.遞歸實作,深度優先周遊二叉樹

二叉樹的常見面試題

二.非遞歸實作,借助輔助資料結構隊列,廣度優先周遊二叉樹

二叉樹的常見面試題

解析:這樣想,首先有一個二叉樹,就是說每次while循環一次,我們queue裡面的元素就是哪一層的節點,比如第一次while,那麼queue裡面就是頭節點,第二次while,那麼queue裡面就是第二層的所有節點,第三次while,那麼queue裡面就是第三層的所有節點,依次規律。。。。。。上述代碼就是這樣的思想來了解

繼續閱讀