演算法 最大二叉樹深度

2021-10-09 03:41:06 字數 1612 閱讀 9231

如題:

求的就是二叉樹的最大深度。

那對於二叉樹或者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,...