《遞迴解法》《深搜》
給定乙個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明:葉子節點是指沒有子節點的節點。
示例:
給定二叉樹[3,9,20,null,null,15,7]
,
3返回它的最大深度 3 。/ \9 20
/ \
15 7
借助額外變數,廣搜
classsolution(object):
defmaxdepth(self, root):
""":type root: treenode
:rtype: int
"""deep=0
que=
if root is
none:
return
0
while
len(que):
actdeeplength=len(que)
#設計乙個迴圈把這一層的節點全pop出去,外迴圈則從下一層的節點開始
while
actdeeplength:
actnode=que.pop(0)
actdeeplength-=1
if actnode.left is
notnone:
if actnode.right is
notnone:
deep+=1
return deep
借助額外空間,廣搜
classsolution(object):
defmaxdepth(self, root):
""":type root: treenode
:rtype: int
"""deep=0
que=
if root is
none:
return
0
while
len(que):
#構造乙個容器nextque來裝當前節點下一層的所有元素
nextque=
for node in
que:
if node.left is
not
if node.right is
not
#下次迴圈就遍歷下一層的元素
que=nextque
deep+=1
return deep
在leetcode題解看到一篇文章:用乙個遞迴套路來解決二叉樹路徑問題。
文章提到自底向上的思考方法,符合這道題的官方題解思路。
defmaxdepth(self, root):
""":type root: treenode
:rtype: int
"""if
notroot:
return
0left =self.maxdepth(root.left)
right =self.maxdepth(root.right)
return max(left,right)+1
1.看懂遞迴**是乙個層面,那麼如何去設計遞迴呢?
這是我一直疑惑的點,**層面已經能夠理解,個人認為下一步應該多刷題,見識各種各樣的遞迴設計思路,期待量變到質變。
104 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 思路 使用遞迴,遍歷左子樹右子樹,使用max找出最大的深度。defin...
104 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 解題思路 採用dfs進行深度搜尋,一行算一次搜尋,輸出結果長度即可。...
104 二叉樹的最大深度
每日leetcode 24 二叉樹的最大深度 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 這道題遞迴到最後葉節點...