二叉树中和为某一值的路径

题目:二叉树中和为某一值的路径

描述

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

预备知识

前序遍历(递归 非递归)
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

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

代码

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;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值