递归的写法的话,主要是考虑清楚递归条件的返回值,以及如何判断最大的深度。
- 递归的返回值,就是叶子节点的下一层,node都为空了,返回0就好。注意不是返回1!!!
- 对于单个节点来说,他的深度为左右子树的深度最大值+1
class Solution(object):
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
非递归写法的话,可以用层次遍历的思路,层次遍历的时候,注意用队列保存每一层的值。然后每一层用len去取当前队列的宽度!
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
from collections import deque
level = 0
que = deque([root])
while que:
level += 1
level_len = len(que)
for i in range(0,level_len):
tmp_node = que.popleft()
if tmp_node.left:
que.append(tmp_node.left)
if tmp_node.right:
que.append(tmp_node.right)
return level