算法-01-二叉树根节点到叶子节点和为指定值的路径

描述

给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径, 例如: 给出如下的二叉树,sum=22

Java 

复制代码
import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型ArrayList<ArrayList<>>
     */
    ArrayList<ArrayList<Integer>> results= new ArrayList<>();
    
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        // write code here
        ArrayList<Integer> path =new ArrayList<>();
        if(root==null)
            return results;
        dfs(root,0,sum,path);
        return results;
    }
    
    public void dfs(TreeNode root,int nowSum, int sum, ArrayList<Integer> list){
        list.add(root.val);
        if(root.right==null&&root.left==null&&sum==nowSum+root.val){
            results.add(new ArrayList<>(list));
            return;
        }
        if(root.left!=null){
            dfs(root.left,nowSum+root.val,sum,list);
            list.remove(list.size()-1);
        }
        if(root.right!=null){
            dfs(root.right, nowSum+root.val,sum,list);
            list.remove(list.size()-1);
        }
    }
}
复制代码

 Python 

复制代码
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
# 
# @param root TreeNode类 
# @param sum int整型 
# @return int整型二维数组
#
class Solution:
    def pathSum(self , root , sum ):
        # write code here
        path = []
        paths = []
        self.dfs(root,sum,path,paths)
        return paths
        
    def dfs(self, root: TreeNode, sum :int, path: list, paths: list):
        if root is None:
            return None
        path.append(root.val)
        if root.left is None and root.right is None and sum==root.val:
            paths.append(path.copy())
        else:
            self.dfs(root.left,sum-root.val,path,paths)
            self.dfs(root.right,sum-root.val,path,paths)
        path.pop(len(path)-1)
  
复制代码

 

posted @   sixinshuier  阅读(237)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2019-07-19 13. VUE 组件之间数据传递
点击右上角即可分享
微信分享提示