博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打印二叉树中所有分支之和等于某个数
阅读量:5260 次
发布时间:2019-06-14

本文共 1148 字,大约阅读时间需要 3 分钟。

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

首先我们应该考虑用什么样的数据结构,既然存路径那么需要用队列,每一个路径就是一个队列,再用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;
}
}

转载于:https://www.cnblogs.com/ScarecrowAnBird/p/6729337.html

你可能感兴趣的文章
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>