《剑指offer》二叉树中和为某一值的路径

本题来自《剑指offer》 二叉树中和为某一值的路径

题目:

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

思路:

  遍历,从根到叶子节点,采用前序遍历的思想,根左右。采用递归的思路。和为某一值,采用递减直到叶子节点刚好等于此值,便就是一条合理的路径。如果不是便继续访问其他的节点。

  处理根节点,将其值保存。判断不是叶子节点便继续访问他的子节点。

  处理叶子节点,如果当前叶子节点的值等于期望值,说明当前的路径便是,将其加入其中。   

Python Code:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def FindPath(self, root, expectNumber):                    # 返回二维列表,内部每个列表表示找到的路径
        # write code here
        if not root:                                           #如果为空了,直接返回空
            return None
                                                               #刚好是子节点,并且刚好和期望的值相等,就直接返回节点的值
        if root and not root.left and not root.right and root.val == expectNumber:
            return [[root.val]]
        res = []                                               #存放搜寻已经找到的路径
        left = self.FindPath(root.left,expectNumber-root.val)  #调用左子树,期望值减去当前的节点值
        right = self.FindPath(root.right,expectNumber-root.val)#调用右子树,期望值减去当前的节点值
        for i in left + right:                                 #将符合的数据加入
            res.append([root.val] + i)
        return res

总结:

原文地址:https://www.cnblogs.com/missidiot/p/10783630.html