二叉树中和为某一值的路径
题目:二叉树中和为某一值的路径
描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从
树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
预备知识
前序遍历(递归 非递归)
Oj
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
//新建一个函数,为了保证list能不断加入数字
pre(root, list);
return list;
}
private void pre(TreeNode root, List list){
//判空以及终止条件
if (root == null) {
return ;
}
list.add(root.val);
//加判断更优雅,不加也可以,一种习惯
if (root.left != null) {
pre(root.left, list);
}
//加判断更优雅,不加也可以,一种习惯
if (root.right != null) {
pre(root.right, list);
}
}
}
思路
1、从根节点开始遍历,说明他是前序遍历
2、到达叶节点不是目标值,要回退元素,其实是一个栈结构
3、树的问题大部分是递归问题
Oj
代码
import java.util.ArrayList;
public class Solution {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
/**
*
* @param root
* @param target
* @return
* 1、从根节点开始遍历,说明他是前序遍历
* 2、到达叶节点不是目标值,要回退元素,其实是一个栈结构
* 3、树的问题大部分是递归问题
*/
//将成员变量建在外部,递归的时候就不会新建变量的问题出现
private ArrayList<Integer> list = new ArrayList<>();
private ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if (root == null){
return lists;
}
list.add(root.val);
target -= root.val;
if (target == 0 && root.right == null && root.left == null){
lists.add(new ArrayList<>(list));
}
FindPath(root.left, target);
FindPath(root.right, target);
//移除list中的元素,不是lists,因为lists中元素根据条件是永远符合的
list.remove(list.size() - 1);
return lists;
}
}
版权声明:本文为chenzhuantou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。