剑指Offer:二叉树中和为某一值的路径【34】

本文提供了一种解决二叉树中寻找所有和为特定值的路径问题的方法。通过递归算法,实现了从根节点到叶节点路径的遍历与求和,并返回所有符合条件的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指Offer:二叉树中和为某一值的路径【34】

题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

题目分析

  

Java题解

package tree;

import java.util.ArrayList;
import java.util.Scanner;

public class FindPath {
    private static ArrayList<ArrayList<Integer>> pathList = new ArrayList<>();

    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(5);
        TreeNode t6 = new TreeNode(3);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;
        t3.left=t6;
        FindPath(t1,7);
    }

    public static ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
        if(root==null)
            return pathList;
        FindPathCore(root,target,new ArrayList());
        return pathList;
    }

    public static void FindPathCore(TreeNode root,int target,ArrayList list)
    {
        if(root==null)
            return;

        list.add(root.val); //先序遍历,先把值加上

        //如果此处是叶子节点,我们再判断值
        if(root.left==null&&root.right==null)
        {
            if(target==root.val)
                pathList.add(list);
            return;
        }
        //这里要分路了
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.addAll(list);
        if(root.left!=null)
            FindPathCore(root.left,target-root.val,list2);
        if(root.right!=null)
            FindPathCore(root.right,target-root.val,list);

    }
}

  

 

转载于:https://www.cnblogs.com/MrSaver/p/9284005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值