给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的所有节点的节点值之和等于规定值的路径
2016-08-03 13:57
609 查看
思路:以先序遍历(根节点-左子树-右子树)的方式访问二叉树的每一个节点,记录根节点到遍历到这个节点的所有节点值之和,同时用一个list存储遍历的路径,若节点和等于给定值则返回路径,直到叶子节点,结束递归。
用到的数据结构:ArrayList,stack
代码如下:import java.util.ArrayList;
import java.util.Stack;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root==null){
return result;
}
Stack<Integer> stack = new Stack<>();
FindPath(root, target, stack, result);
return result;
}
private void FindPath(TreeNode root, int target, Stack<Integer> stack, ArrayList<ArrayList<Integer>> result) {
if(root==null){
return;
}
if(root.left==null&&root.right==null){
if(root.val==target){
ArrayList<Integer> list = new ArrayList<>();
for(int i:stack){
list.add(i);
}
list.add(root.val);
result.add(list);
}
}else{
stack.push(root.val);
FindPath(root.left, target-root.val, stack, result);
FindPath(root.right, target-root.val, stack, result);
stack.pop();
}
}
}
用到的数据结构:ArrayList,stack
代码如下:import java.util.ArrayList;
import java.util.Stack;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(root==null){
return result;
}
Stack<Integer> stack = new Stack<>();
FindPath(root, target, stack, result);
return result;
}
private void FindPath(TreeNode root, int target, Stack<Integer> stack, ArrayList<ArrayList<Integer>> result) {
if(root==null){
return;
}
if(root.left==null&&root.right==null){
if(root.val==target){
ArrayList<Integer> list = new ArrayList<>();
for(int i:stack){
list.add(i);
}
list.add(root.val);
result.add(list);
}
}else{
stack.push(root.val);
FindPath(root.left, target-root.val, stack, result);
FindPath(root.right, target-root.val, stack, result);
stack.pop();
}
}
}
相关文章推荐
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 给定一棵二叉树,每个结点包含一个值。打印出所有满足以下条件的路径: 路径上结点的值加起来等于给定的一个值。注意:这些路径不必从根结点开始。
- 今天开始学Java 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- 打印二叉树节点数值总和等于某个给定节点的所有路径
- 给定一棵二叉树,和一个数值。求二叉树的路径和等于给定值的所有路径
- 给你一个二叉树,其中每个节点都包含一个整数值。查找总和给定值的路径数,路径不需要在根或叶子处开始或结束,但必须向下
- 【二叉树的递归】04找出二叉树中路径和等于给定值的所有路径【Path Sum II】
- 给定一个二叉树,找到最大路径和。该路径可以在树中的任何节点处开始和结束。
- 程序员面试金典: 9.4树与图 4.9在二叉树中,打印结点数值总和等于给定值的所有路径
- 找出二叉树中所有累加值为给定值的路径
- PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
- 给定候选号码(C)和目标号码(T)的集合,找出C中候选号码总和为T的所有唯一组合 C中的每个数字只能在组合中使用一次。
- 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- PathSum2 给出所有的树根节点到叶子节点之和等于给定值的所有路径
- 二叉树中根到叶子路径中节点和等于给定值的路径
- 二叉树的每个节点为0-9的一个数字,根到叶子的一条路径拼成一个数,求所有路径形成的数字和
- 找出二叉树中和最大的路径,路径可以从任意节点开始,到任意节点结束。
- 二叉树中找出和为给定值得所有路径
- 二叉树中根到叶子路径中节点和等于给定值的路径
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量