码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-04-01 13:22:02      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:数据结构   二叉树   info   root   targe   图片   png   pat   solution   

看到返回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. 二叉树中和为某一值的路径

标签:数据结构   二叉树   info   root   targe   图片   png   pat   solution   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!