劍指offer 55 I 二叉樹的深度

2021-10-07 11:12:26 字數 1492 閱讀 6677

輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。

例如:

給定二叉樹 [3,9,20,null,null,15,7],3/

9 20

/ 15 7

返回它的最大深度 3 。

節點總數 <= 10000

數的遍歷可以分為:深度優先搜尋dfs、廣度優先搜尋bfs

深度優先搜尋一般利用遞迴、棧實現

廣度優先搜尋一般利用佇列實現

一、遞迴

樹的深度:左子樹的深度和右子樹深度的最大值 +1

終止條件:當root為null時,返回0

時間複雜度:o(n),計算樹的深度需要遍歷所有節點

空間複雜度:o(n),最壞的情況(當樹退化為鍊錶時)

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

}

遞迴解法分別求出左子樹、右子樹的深度,比較左子樹、右子樹的深度,選出最大的乙個,再加1就是二叉樹的深度

/**

public class treenode }*/

public

class

solution

int left =

treedepth

(root.left)

;int right =

treedepth

(root.right)

;return

(left>right)

?(left+1)

:(right+1)

;}}

二、層序遍歷

樹的層序遍歷 / 廣度優先搜尋往往利用佇列實現。

linkedlist類實現了queue介面,因此我們可以把linkedlist當成queue來用。

時間複雜度:o(n) 訪問樹的每個節點

空間複雜度:o(n) 最壞情況下(當樹平衡時),佇列同時儲存n/2個節點

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

depth++;}

return depth;

}}

劍指 Offer 55 I 二叉樹的深度

難度簡單27收藏分享切換為英文關注反饋 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 definition fo...

劍指 Offer 55 I 二叉樹的深度

劍指 offer 55 i.二叉樹的深度 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 9 20 15 7 返回它的最大深度 3 節點總數 10000 3....

劍指 Offer 55 I 二叉樹的深度

輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 一 dfs 遞迴 後序遍歷 definition for a b...