如題:
求的就是二叉樹的最大深度。
那對於二叉樹或者b+樹的處理,最主要的兩種查詢發放就是深度優先、廣度優先。此處要求樹的高度,第乙個想到的是廣度優先。如下演算法1
class
treenode
:def
__init__
(self, x)
: self.val = x
self.left =
none
self.right =
none
# 廣度優先遍歷
class
solution
:def
maxdepth
(self, root: treenode)
->
int:
if root:
line =
[root]
else
: line =
self.deep_level =
0def
bfs(line)
:if line:
self.deep_level +=
1else
:return
new_line =
for item in line:
if item.left:
if item.right:
bfs(new_line)
bfs(line)
return self.deep_level
if __name__ ==
'__main__'
: root = treenode(3)
node1 = treenode(9)
node2 = treenode(20)
node3 = treenode(15)
node4 = treenode(7)
root.left = node1
root.right = node2
node2.left = node3
node2.right = node4
res = solution(
).maxdepth(root)
print
(res)
另外,後來看到一種解法,遞迴
效率上更高,個人認為這個遞迴類似於動態規劃。
只不過動態規劃方程類似這樣:
dp = max(dp.left+1,dp.right+1)
而不是普通的動態規劃方程
dp[i][j] = ...
這種結構
# 遞迴
class
solution
:def
maxdepth
(self, root: treenode)
->
int:
if root:
return
max(self.maxdepth(root.left)+1
,self.maxdepth(root.right)+1
)else
:return
0
最大二叉樹
題目大意 總是按照當前陣列或者子陣列中的元素值的最大值作為根節點,依次建立一顆二叉樹。輸入 nums 3 2,1 6,0 5 輸出 6,3,5,null,2,0,null,null,1 解釋 遞迴呼叫如下所示 3,2,1,6,0,5 中的最大值是 6 左邊部分是 3,2,1 右邊部分是 0,5 3,...
演算法 二叉樹最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 遞迴 深度優先 遞迴到最底層後一層層返回,有節點返回1,沒節點返回零...
654 最大二叉樹
給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下 二叉樹的根是陣列中的最大元素。左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。example 1 輸入 3,2,1,6,...