求二叉树所有路径
来源:互联网 发布:java 日志级别设置 编辑:程序博客网 时间:2024/05/21 18:40
题目描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。
样例:
递归 + 深搜的思路。还记得之前学过的用递归的方法解决二叉树的前序遍历的问题吗?点击打开链接,用的就是深搜的策略,递归实现。我们在这里,依然用这种逻辑
基本解法可以这样描述:从根节点出发找叶子,找到叶子之后,所有这条“找寻之路”上的所有节点构成了我们要打印出来的一条路径。所以,我们需要建立一个全局变量path,存储未到达当前节点时扫描过的路径中有哪些节点,作为从当前节点起,往叶子遍历所经过的路径的前缀。同理,最后的结果列表也是一个全局变量了。
所以,当LintCode中给出的函数形参只有一个root时,我们就需要再设定一个辅助函数,包含刚才说的path和result,让他们两个成为全局变量。
总结一下思路:
1. 建立一个字符串变量path和结果列表result,初始化为空
2. 从根节点开始访问,之后访问其左子树,再访问其右子树
3. 每访问一个节点,将节点的值加入path,例如,访问完根节点后,path = “1 ->”,并将这里的path作为新的变量加入左右子树的遍历函数
4. 递归“触底”的条件:访问的节点为空
讲的不是很清楚,对照代码看一下吧
[python] view plain copy
“””
Definition of TreeNode:
class TreeNode:
def init(self, val):
self.val = val
self.left, self.right = None, None
“””
class Solution:
# @param {TreeNode} root the root of the binary tree
# @return {List[str]} all root-to-leaf paths
def binaryTreePaths(self, root):
# 建立两个全局变量
path = “”
result = []
# 另建一个helper函数,方便对全局变量path,result的使用
self.helper(root, path, result)
return result
# void型函数,给结果列表result中添加由path为前缀的所有路径 def helper(self, root, path, result): if root is None: return path = path + str(root.val) # 递归对左孩子求路径 if root.left: self.helper(root.left, path + "->", result) # 递归对右孩子求路径 if root.right: self.helper(root.right, path + "->", result) # 如果是叶子,加入result if root.left is None and root.right is None: result.append(path) # Write your code here
需要注意的是第33行,当当前访问的节点为叶子的时候,才将path加入结果列表。
这里是典型的递归,helper函数求的就是以参量root为根节点,path为路径前缀(也就是到达这个节点之前经过的路径)的子树的所有路径,我们只需要考虑递归“触底”的条件(root为空)和递归“升级”的条件(先用path加,再加左子树所有路径,再加右子树所有路径,如果左右子树都为空,也就是叶子了,就直接加入结果列表)
- 求二叉树所有路径
- 求二叉树中和为给定值的所有路径
- 遍历二叉树所有路径并求指定值
- 回溯法-求二叉树中路径和为某一定值所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 链表的销毁
- 有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- echars的使用
- 一个对List中的数据进行分页的工具类
- 【Luogu3455】【POI2007】ZAP-Queries(莫比乌斯反演)
- 求二叉树所有路径
- BZOJ 4636: 蒟蒻的数列 分块 (未敲)
- 孤儿进程和僵尸进程详解
- 欢迎使用CSDN-markdown编辑器
- 1031. 查验身份证(15)
- redis基础总结
- FCN-数据篇
- goahead文件下载
- 分答项目_知识点:composer