题解 | #二叉树中和为某一值的路径(一)#

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

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.stream.Collectors;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     *
     * @param root TreeNode类
     * @param sum int整型
     * @return bool布尔型
     */
    public boolean hasPathSum (TreeNode root, int sum) {
        ArrayList<ArrayList<Integer>> results = new ArrayList<>();
        LinkedList<Integer> queue = new LinkedList<>();
        int sumAll = 0;
        if (root != null) {
            addDatas(root, sum, results, queue, sumAll);
        }
        return results.size() > 0;
    }

    private void addDatas(TreeNode root, int expectNumber,
                          ArrayList<ArrayList<Integer>> results, LinkedList<Integer> queue, int sumAll) {
        if (root != null) {
            sumAll += root.val;
            queue.add(root.val);
            if (sumAll == expectNumber && root.left == null && root.right == null) {
                addResult(results, queue);
            } else {
                addDatas(root.left, expectNumber, results, queue, sumAll);
                addDatas(root.right, expectNumber, results, queue, sumAll);
            }
            queue.pollLast();
            sumAll -= root.val;
        }
    }


    private void addResult(ArrayList<ArrayList<Integer>> results,
                           LinkedList<Integer> queue) {
        // 循环队列中的元素
        ArrayList<Integer> result = (ArrayList)queue.stream().collect(
                                        Collectors.toList());
        results.add(result);
    }
}

解题思想:队列+递归+回朔

#算法##算法笔记#
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 11:22
怎么这么多逆天求职者,救救我救救我救救我😭
flmz_Kk:哈哈哈哈哈哈,这么多求职者,肯定有那一两个逆天的
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务