原题
原题链接:https://leetcode.com/problems/path-sum-ii/
解题思路
与题257完全类似,请见:http://blog.csdn.net/wangt443/article/details/51939584
代码
public class Solution113_iterator {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
int currentSum = 0;
TreeNode lastVisit = null;
List<List<Integer>> allRoutes = new ArrayList<List<Integer>>();
Deque<TreeNode> stack = new LinkedList<TreeNode>();
if (root != null)
stack.push(root);
while (!stack.isEmpty()){
while (stack.peek() != null){
TreeNode currentNode = stack.peek();
currentSum += currentNode.val;
stack.push(currentNode.left);
}
stack.pop();
if (!stack.isEmpty()){
TreeNode currentNode = stack.peek();
if (currentNode.right == null || currentNode.right == lastVisit){
if (currentNode.left == null && currentNode.right == null && currentSum == sum){
List<Integer> oneRoute = getListFromStack(stack);
allRoutes.add(oneRoute);
}
TreeNode deleteNode = stack.pop();
currentSum -= deleteNode.val;
stack.push(null);
lastVisit = deleteNode;
}
else
stack.push(currentNode.right);
}
}
return allRoutes;
}
private List<Integer> getListFromStack(Deque<TreeNode> stack){
List<Integer> oneRoute = new ArrayList<Integer>();
Iterator iterator = stack.descendingIterator();
while (iterator.hasNext()) {
TreeNode node = (TreeNode)iterator.next();
oneRoute.add(node.val);
}
List<Integer> tempList = new ArrayList<Integer>(oneRoute);
return oneRoute;
}
}