EB1 求评估 谢谢# Immigration - 落地生根
P*e
1 楼
这是一个网上的非递归解, 其中他先用peek()来看一下stack上是什么,然后如果有右
节点,就直接转向有节点。如果是叶子,就看是不是到了sum,到了就加进结果。然后,
不管到还是每到,都从stack上面pop().
问题是,为啥要先peek()一下,然后只有到是leaf才pop()。一般inorder traversal都
是立刻pop()的。这题这里做目的是什么?
public class Solution {
public List
节点,就直接转向有节点。如果是叶子,就看是不是到了sum,到了就加进结果。然后,
不管到还是每到,都从stack上面pop().
问题是,为啥要先peek()一下,然后只有到是leaf才pop()。一般inorder traversal都
是立刻pop()的。这题这里做目的是什么?
public class Solution {
public List
- > pathSum(TreeNode root, int sum) {
List
- > res = new ArrayList<>();
List
Stack
int SUM = 0;
TreeNode cur = root;
TreeNode pre = null;
while(cur!=null || !stack.isEmpty()){
while(cur!=null){
stack.push(cur);
path.add(cur.val);
SUM+=cur.val;
cur=cur.left;
}
cur = stack.peek();
if(cur.right!=null && cur.right!=pre){
cur = cur.right;
continue;
}
if(cur.left==null && cur.right==null && SUM==sum)
res.add(new ArrayList
pre = cur;
stack.pop();
path.remove(path.size()-1);
SUM-=cur.val;
cur = null;
}
return res;
}
}