輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。
例如:
給定二叉樹 [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...