257.二叉树的所有路径

27 阅读1分钟

题目

[257. 二叉树的所有路径] 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

image.png

解题思路

根据所给要求咱们来想一下 先考虑空二叉树 当为空时输出【】 就可
然后是要用递归来搞 这里考虑到用前序遍历的方式 可以搞一个pass来储存遍历的值 当遇到叶子节点的时候也就可以把pass传到result中 当然要经过变化(->要加上) 那么为了能够让他回到上一步 咱们需要用一步回溯

def travelsal(self,node,pas,result):  
    pas.append(node.val)
    if not node.left and not node.right:
        ss="->".join(map(str,pas))
        result.append(ss)
    if node.left:
        travelsal(self,node.left,pas,result)
        pas.pop()
    if node.right:
        travel(self,node.right,pas,result)
        pas.pop()

回溯这一步是没问题的 就是pas.pop() 这一步也可以省略掉 就是如果每次传入的不是一个变量 而是一个重新规定的已知的数列 那么就不会出现太大的问题

def travelsal(self,node,pas,result):  
    pas.append(node.val)
    if not node.left and not node.right:
        ss="->".join(map(str,pas))
        result.append(ss)
    if node.left:
        travelsal(self,node.left,pas[:],result)
    if node.right:
        travel(self,node.right,pas[:],result)

这里的pass是会变的 但是传入的不再是一个变量pass 而是一个不会改变的值 pass【:】记录的是pass当前的值 不会随着pass的改变而改变 那么咱们就不需要再进行什么回溯了

1112

这是第一个办法也就是递归的办法 下一次遇到这道题会尝试一下列举的办法 也就是迭代法