热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

二叉树路径和的深度解析与算法优化

本文深入探讨了二叉树路径和问题的算法优化方法。具体而言,给定一棵二叉树,需要找出所有从根节点到叶节点的路径,其中各节点值的总和等于指定的目标值。通过详细分析和优化,提出了一种高效的解决方案,并通过多个样例验证了其有效性和性能。

376. 二叉树的路径和

中文English

给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。

一个有效的路径,指的是从根节点到叶节点的路径。

样例

样例1:

输入:
{1,2,4,2,3}
5
输出: [[1, 2, 2],[1, 4]]
说明:
这棵树如下图所示:
	     1
	    / \
	   2   4
	  / \
	 2   3
对于目标总和为5,很显然1 + 2 + 2 = 1 + 4 = 5

样例2:

输入:
{1,2,4,2,3}
3
输出: []
说明:
这棵树如下图所示:
	     1
	    / \
	   2   4
	  / \
	 2   3
注意到题目要求我们寻找从根节点到叶子节点的路径。
1 + 2 + 2 = 5, 1 + 2 + 3 = 6, 1 + 4 = 5 
这里没有合法的路径满足和等于3.
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 DFS写法

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param: root: the root of binary tree
    @param: target: An integer
    @return: all valid paths
    """
    def binaryTreePathSum(self, root, target):
        # write your code here
        
        results = []
        self.dfs(root, results, [], 0, target)
        
        return results 
    
    def dfs(self, root, results, path, sums, target):
        if not root: return
        
        path.append(root.val)
        sums += root.val
        
        #如果要加return的话,需要pop掉一个值,否则path的值除了第一个,后面都是大于target的
        if not root.left and not root.right and sums == target:
            results.append(path[:])
            path.pop()
            return 
            
        self.dfs(root.left, results, path, sums, target)
        self.dfs(root.right, results, path, sums, target)
        #回溯,往回删除,找根节点
        path.pop()
        
        

 


推荐阅读
author-avatar
一起回到我们的那个夏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有