二叉树路径相关(python)

0、相关题目

相关题目为:

112. 路径总和

113. 路径总和 II

257. 二叉树的所有路径

129. 求根到叶子节点数字之和

面试题 04.12. 求和路径

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、结束

以上题目均可套用次代码框架暴力求解,个别题目可以边遍历,边得出要返回的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值