劍指Offer 二叉樹的深度

2021-09-22 22:54:16 字數 1583 閱讀 2975

題目描述(一)

輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。例如下圖中的二叉樹的深度為3,因為它從根結點到葉結點最長的路徑包含4個結點(從根結點1開始,經過結點2和結點5,最終到達葉結點7)

解題思路

遞迴真的反人性全靠想象。

演算法**

腦子轉不過來說實話!

package offer;

/** * 二叉樹的深度

*/public

class

offer55

static

inttreedepth

(treelinknode root)

return0;

}}

題目描述(二)

輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如,下圖中的二叉樹就是一棵平衡二叉樹。

解題思路

遞迴真的反人性全靠想象。

演算法**

類似,只不過最後加了乙個判斷條件。

package offer;

/** * 平衡二叉樹 判斷是否是平衡二叉樹

*/public

class

offer55_2

/** * 通過後序遍歷分別先遍歷左右子節點

** @param root

* @return

*/private

static

boolean

isbalanced

(treelinknode root)

int left =

treedepth

(root.left)

;int right =

treedepth

(root.right)

;int diff=left-right;

if(diff>

1||diff

)return

isbalanced

(root.left)

&&isbalanced

(root.right);}

static

inttreedepth

(treelinknode root)

return0;

}}

附錄

該題原始碼在我的 ?github 上面!

劍指offer 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。如果二叉樹只有根節點那麼深度就是1,如果只有左子樹,那麼就是左子樹的深度加1就是整棵二叉樹的深度 如果只有右子樹,那麼二叉樹的深度就是右子樹的深度加1 如果既有左子樹又有右子樹,那...

劍指offer 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 面對樹形結構,我們常用的演算法就是遞迴,根樹的每一塊子樹都可以看成一棵小的完整的樹,這位我們解題提供了很好的思路。如果一開始傳入的就是空的那麼深度就是0,如果不是0,那麼這顆...

劍指offer 二叉樹的深度

class solution def treedepth self,proot write code here if proot none return 0 return max 1 self.treedepth proot.left 1 self.treedepth proot.right 非常簡...