Leetcode 104:二叉樹的最大深度(最詳細的解法!!!)
阿新 • • 發佈:2019-02-02
給定一個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解題思路
整個問題一個很簡單的思路就是使用遞迴。怎麼做呢?我們只要通過maxDepth
分別計算出左子樹和右子樹的深度,比較這兩個深度,取最大值k
。那麼當前這棵樹深度的最大值就變成了k + 1
。So easy!!O(∩_∩)O
class Solution:
def maxDepth (self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
當然我們可以寫得更加簡潔
class Solution:
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
return 0 if not root else max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
但是還沒有結束,對於可以用遞迴解決的問題,我們都應該思考一下怎麼可以通過迭代去解決。那這個問題怎麼通過迭代解決呢?那麼我們就會用到stack
,通過stack
模擬上面的遞迴過程。一個較為簡單的思路就是二叉樹的層序遍歷,參看這篇Leetcode 102:二叉樹的層次遍歷(最詳細解決方案!!!) ,我們在此基礎上稍加修改就可以了。
class Solution:
def maxDepth(self, root) :
"""
:type root: TreeNode
:rtype: int
"""
q = [(root, 1)]
result = 0
while q:
node, depth = q.pop(0)
if node:
result = max(result, depth)
q.extend([(node.left, depth + 1), (node.right, depth + 1)])
return result
如有問題,希望大家指出!!!