zoukankan      html  css  js  c++  java
  • 打印二叉树中所有分支之和等于某个数

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

    首先我们应该考虑用什么样的数据结构,既然存路径那么需要用队列,每一个路径就是一个队列,再用ArrayList<ArrayList<Integer>>包含符合条件的所有路径。

    步骤:1.从根开始先序遍历,然后与target做差 (判断<0直接舍弃该路径),等于0且是叶子节点输出路径。2.找到一个孩子(左孩子或右孩子)继续递归调用

    import java.util.*;
    public class suanfa2 {
    ArrayList<ArrayList<Integer>> paths = new ArrayList<ArrayList<Integer>>();
    public ArrayList<ArrayList<Integer>> SearchPath(TreeNode root, int target){
    if(root==null) return paths;
    //递归调用
    FindPath(root,target,new ArrayList<Integer>());
    return paths;
    }
    public void FindPath(TreeNode root, int target, ArrayList<Integer> path) {
    if(root == null) return ;
    target -=root.val;
    if(target<0) return ;
    path.add(root.val);
    if(root.left==null && root.right==null && target == 0){
    paths.add(path);
    return ;
    }
    //不是叶子节点继续向下遍历,拷贝一个路径
    ArrayList<Integer> path2=new ArrayList<>();
    path2.addAll(path);
    if(root.left != null){
    FindPath(root.left, target,path);
    }
    if(root.right !=null){
    FindPath(root.right, target,path2);
    }
    }
    }
    class TreeNode{
    int val=0;
    TreeNode left;
    TreeNode right;
    public TreeNode(int val){
    this.val = val;
    }
    }

  • 相关阅读:
    Linux系统调优方法
    递归(Recursion)算法
    数据结构之链表
    【日常摸鱼】牛客挑战赛2
    【日常摸鱼】牛客挑战赛1
    组合计数学习笔记1
    To-Do List 2
    20199112 2019-2020-2 《网络攻防实践》第 3 周作业
    Flutter上线项目实战——腾讯点播直播下载
    打开旧Flutter项目说:Your Flutter application is created using an older version of the Android embedding
  • 原文地址:https://www.cnblogs.com/ScarecrowAnBird/p/6729337.html
Copyright © 2011-2022 走看看