0、相关题目
相关题目为:
1、共通性
二叉树结点的数据结构为:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
一般来说,树、图类的问题大部分可用DFS、BFS进行求解。总归是要利用这两种遍历方式,在遍历的过程中对利用当前节点进行处理。这里的几道题都可以归结为得到从一棵树的根节点到所有叶子节点的所有路径。
2、代码框架
def dfs(root,path):
if root==None:
return
path.append(root.val)
if root!=None and root.left==None and root.right==None:
res.append(path.copy())
dfs(root.left,path)
dfs(root.right,path)
#根节点才能运行到此,当root为叶子节点的这一次调用的返回点,需要将path的最后一个元素(叶子节点值)pop掉
path.pop()
res=[]
dfs(root,[])
#执行完dfs后,例如res中为[[1,2,3],[1,2]]
这里的关键在于,dfs不返回任何数据,传入参数有一个列表,在每次递归调用的时候都会向列表中增加当前节点的值,直到当前节点为叶子节点的时候,可看到,递归函数中递归终止条件有root==None,也即,当前节点为叶子节点的时候对自己的左右孩子(均为None)分别调用dfs,然后就返回了,只是走个过场。然后运行到path.pop(),因为如果不pop()的话,path中的元素会一直增加,所以也就是必须在执行完叶子节点的那次调用的时候把叶子节点的值弹出才能返回给上层函数。
3、结束
以上题目均可套用次代码框架暴力求解,个别题目可以边遍历,边得出要返回的结果。