【剑指offer】二叉树中和为某一值的路径 python

276 阅读1分钟

【题目描述】

输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

【思路】

递归解决,递归函数主要包含三个参数,1是当前根节点,2是当前路径之和,三是当前路径的记录列表。

函数体内,主要是更新sum1和array,当遇到叶节点,并且路径之和为目标值,则加入到结果列表中。否则,如果有左子,则对左遍进行递归调用;有右子,则对右子执行递归调用。

最重要的是!!记得每次递归结束将当前节点从array中移除,假设当前节点值为4,其父亲节点为2,其右兄弟节点为5;因为4是2的左子节点,那么节点4递归调用结束后,array中添加了4;当其父节点对右子节点递归调用,传入array时,array中的最后一个节点应该是其父亲节点2。

因此记得每次递归结束移除array中最后一个元素。

【代码】

python:
class Solution:
    def FindPath(self, root, expectNumber):
        self.re=[]
        if not root:
            return self.re
        self.target=expectNumber
        self.dfs(root,0,[])
        return self.re

    def dfs(self,root,sum1,array):
        sum1+=root.val
        array.append(root.val)
        if sum1==self.target and not root.left and not root.right:
            self.re.append(list(array))
        if root.left:
            self.dfs(root.left,sum1,array)
        if root.right:
            self.dfs(root.right,sum1,array)
        array.pop()