首页 > 其他 > 详细

面试题34. 二叉树中和为某一值的路径

时间:2021-04-01 00:21:03      阅读:20      评论:0      收藏:0      [点我收藏+]

看到返回List就好奇试了一下

List<List<Integer>> res = new List<>();

结果果然还是不行的。

这道题的思路很好 理解,先序遍历将当前节点值添加进路径。

如果符合一条路径的标准就在res存做一个答案。

遍历到null就返回到上一层,然后会有一个removeLast方法,去除刚刚下一层递归存入

技术分享图片

 

面试题34. 二叉树中和为某一值的路径

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    LinkedList<List<Integer>> res = new LinkedList<>();
    LinkedList<Integer> path = new LinkedList<>();

    //List 不是数据结构,ArrayList 是数组,LinkedList 是双向链表,
    //List 是接口,接口可以作为返回值
    //但是上面因为是接口,所以不能 List<List<Integer>> res = new List<>();
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        recur(root, target);
        return res;
    }

    
    void recur(TreeNode root, int tar){
        //若节点 root 为空,则直接返回。
        if(root == null) return;
        //更新目标值
        tar -= root.val;
        //添加当前路径
        path.add(root.val);
        //找到了一条路径
        if(tar == 0 && root.left == null && root.right == null)
            res.add(new LinkedList(path));
        //继续向两边递归
        recur(root.left, tar);
        recur(root.right ,tar);
        //马上这一层递归就要结束了,去除这层递归的路径
        path.removeLast();
    }
}

 

面试题34. 二叉树中和为某一值的路径

原文:https://www.cnblogs.com/deerlet/p/14594810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!