递归思想的理解参照知乎的答案:https://www.zhihu.com/question/31412436
1、第一递归函数功能: 二叉树的最大深度
2、找出递归结束的条件:叶子节点 root=None
3、找出函数的等价关系式:最大深度=max(l,r)+1,左右子树的最大深度+1
左右的节点在实现时,都是作为根节点,进行下一次的递归。类似f( n )=max( f( r ) , f( l ) )+1,f是不变的,但是内容会变。
f( n )=f( n-1 )+f( n-2)
代码实现:
第一次做递归的题,有些理解不够透彻。以后慢慢加强。
# Definition for a binary tree node.
# 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 is None:#结束条件
return 0
left_len=self.maxDepth(root.left) #先遍历左子树,到叶子返回,代码向下一行,计算本层右子树
right_len=self.maxDepth(root.right) #遍历右子树
return max(left_len,right_len)+1 #关系式
方法二:广度优先
python直接用栈,比较每个存在节点的左右子树的深度和当前深度,保存最深的。
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if(root==None):
return 0
stack,depth=[],0
stack.append((1,root))
while stack:
cur,node=stack.pop()
if node!=None:
depth=max(depth,cur)
if node:
stack.append((cur+1,node.left))
stack.append((cur+1,node.right))
return depth
c++用队列,先进先出。有序的按层下降。