zoukankan      html  css  js  c++  java
  • 《剑指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

    总结:

  • 相关阅读:
    查找算法——找到序列中第二大的数(修正版)
    排序算法——堆排序
    排序算法——选择排序
    排序算法——冒泡排序
    排序算法——快速排序
    2013年全国各大著名的IT公司薪资待遇大揭密 给出入职场的民工一点建议
    各大IT公司2012校园招聘笔试面试整理
    九大排序算法总结
    mysql之创建数据库,创建数据表
    各种排序算法汇总
  • 原文地址:https://www.cnblogs.com/missidiot/p/10783630.html
Copyright © 2011-2022 走看看