LeetCode题解-113-Path Sum II

原题



原题链接: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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值