LeetCode 二叉樹的最大深度

2021-09-17 23:31:29 字數 1731 閱讀 4569

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

注:葉子節點是指沒有子節點的節點。

給定二叉樹 [3,

9,20,null,null,15,

7]3/ \

920/ \

157 返回它的最大深度 3

深度優先遍歷-遞迴實現( python )
class

solution

:def

maxdepth

(self, root: treenode)

->

int:

if(root ==

none):

return

0 d_left = self.maxdepth(root.left)

d_right = self.maxdepth(root.right)

depth =1+

(d_left if d_left >= d_right else d_right)

return depth

基本思路

首先要考慮遞迴的基準情況,即root為none時要返回,然後就可以放心大膽地分成左右子樹進行遞迴了,但不能忘了樹的深度是子樹最大深度+1。

複雜度分析

因為訪問了樹的所有節點,所以時間複雜度為o(n

)o\left( n \right)

o(n)

。在最糟糕的情況下,即每個結點只有左子節點,此時遞迴會被呼叫n次,空間複雜度為o(n

)o \left( n\right)

o(n)

,平均情況下為o(l

ogn)

o \left( logn \right)

o(logn

)。廣度優先遍歷-迭代實現( python )

class

solution

:def

maxdepth

(self, root: treenode)

->

int:

if(root ==

none):

return

0 n_stack =

[root]

depth =

0while

(n_stack !=

):length =

len(n_stack)

while length:

n_tmp = n_stack.pop(0)

length -=1if

(n_tmp.left):if

(n_tmp.right)

: depth +=

1return depth

基本思路

考慮用棧來實現迭代,python的list可以很方便實現這一點。這裡的關鍵在於變數length,它記錄了每一層節點的數量,然後分別訪問這些節點,將它們存在的子節點壓入棧中,同時深度增加。

複雜度分析

因為要訪問所有節點,所以時間複雜度為o(n

)o \left( n \right)

o(n)

。空間上棧的最大長度等於樹的最大寬度,最大為o(⌈

n2⌉)

o \left( \lceil \frac \rceil \right)

o(⌈2n​⌉)。

LeetCode 二叉樹最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 解題關鍵 明白二叉樹基本操作。definition for a bin...

二叉樹最大深度 leetcode

這個題目開始要想是用遞迴,但是遞迴的形式,沒有想對。直接判斷left right 比較麻煩,不如在遞迴呼叫的時候判斷root是否為空。public class solution int led maxdepth root.left int rid maxdepth root.right return...

Leetcode二叉樹最大深度

二叉樹的最大深度,即為二叉樹的層數,開始的想法是遍歷左子樹和遍歷右子樹,返回記錄的最大值。這樣明顯是有漏洞的,如果最右的右子樹有左孩子或者左子樹有右孩子,結果就是不正確的。使用遞迴的方法,整樹的最大深度為左孩子樹的最大深度或者右孩子樹的最大深度。遞迴結束的條件是,當乙個結點的左右子樹都為空時,返回1...