这道题目和是path-sum的变形,其实还是比较简单的。我再重复写一遍之前的代码好了。
啊啊啊,重复使得我加深印象。我热爱重复
清明节刷的第四道题目。

给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum的路径,
例如:
给出如下的二叉树,sum=22,

解题代码

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
        //这道题目和是path-sum的变形,其实还是比较简单的。我再重复写一遍之前的代码好了。
        //啊啊啊,重复使得我加深印象。我热爱重复
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

        if(root == null)return result;//牛客网好坑爹,这种的不允许直接返回null

        ArrayList<Integer> path = new ArrayList<Integer>();
        int pathSum = root.val;
        Stack<TreeNode> stackNode = new Stack<>();
        Stack<Integer> stackFlag = new Stack<>();
        //把root数据初始化进去
        path.add(root.val);
        stackNode.push(root);
        stackFlag.push(0);

        while(!stackNode.isEmpty()){
            TreeNode tempNode = stackNode.peek();
            int tempFlag = stackFlag.peek();
            if(tempFlag == 0){
                //如果左右子树没有被访问过,优先判断是否为叶子节点
                if(tempNode.left