资源经验分享剑指Offer(二十四):二叉树中和为某一值的路径

剑指Offer(二十四):二叉树中和为某一值的路径

2019-10-23 | |  105 |   0

原标题:剑指Offer(二十四):二叉树中和为某一值的路径

原文来自:博客园      原文链接:http://www.xinhuanet.com/2019-09/09/c_1124976366.htm


一、引子

这个系列是我在牛客网上刷《剑指Offer》的刷题笔记,旨在提升下自己的算法能力。
查看完整的剑指Offer算法题解析请点击:剑指Offer完整习题解析

二、题目

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

1、思路

两个全局变量result和tmp,result来存放最终结果,tmp用来存放临时结果。

每次遍历,我们先把root的值拼接给tmp,然后判断当前root是否同时满足:

  • 左子树不为空

  • 右子树不为空

  • 拼接的结果和是否和expectNumber值相等

如果满足条件,就将tmp拼接result中,否则,依次遍历左右子树。需要注意的是,遍历左右子树的时候,全局变量tmp是需要做回溯的,因为假如一个叶子结点的路径之和不符合要求我们是不是要回溯?是不是要把这个叶子结点擦掉然后回到父节点去访问另一个子节点。

2、编程实现

python

代码实现方案:

# -*- coding:utf-8 -*-# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:
    # 返回二维列表,内部每个列表表示找到的路径
    def FindPath(self, root, expectNumber):
        # write code here
        def subFindPath(root):
            if root:
                tmp.append(root.val)                if not root.right and not root.left and sum(tmp) == expectNumber:
                    result.append(tmp[:])                else:
                    subFindPath(root.left),subFindPath(root.right)                # 回溯
                tmp.pop()
        result, tmp = [], []
        subFindPath(root)
        sorted(result, key=len, reverse=True)        return result


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:用深度学习做命名实体识别(七)-CRF介绍

下一篇:剑指Offer(一):二维数组中的查找

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...