leetcode--Path Sum II

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

return

[
   [5,4,11,2],
   [5,8,4,5]
]


题意:给定二叉树和一个sum,找出所有和为sum的路径

分类:二叉树


解法1:后序遍历非递归算法。每次访问一个节点,判断当前和是否和sum相等,如果是则保存这个路径。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int target) {
		ArrayList<TreeNode> stack = new ArrayList<TreeNode>();  
        List<List<Integer>> result = new ArrayList<List<Integer>>();  
        int top = -1;  
        int sum = 0;  
        TreeNode p = root;        
        do{           
            while(p!=null){  
                top++;  
                sum += p.val;  
                stack.add(top,p);                 
                p = p.left;               
            }             
            boolean flag = true;  
            TreeNode q = null;  
            while(top!=-1 && flag){  
                p = stack.get(top);  
                if(p.right==q){  
                    if(p.left==null&&p.right==null && sum==target){  
                        ArrayList<Integer> t = new ArrayList<Integer>();  
                        for(TreeNode tNode : stack){  
                            t.add(tNode.val);  
                        }  
                        result.add(t);  
                    }  
                    sum -= p.val;  
                    stack.remove(top);  
                    top--;  
                    q = p;  
                }else{  
                    p = p.right;  
                    flag = false;                 
                }  
            }  
        }while(top!=-1);  
        return result;  
    }		
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值