leetcode112 Path Sum

来源:互联网 发布:复制信息打开手机淘宝 编辑:程序博客网 时间:2024/06/07 03:06

Path Sum

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

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

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

下面程序中包含树的非递归遍历与PathSum的解法。PathSum采用了非递归遍历的思想

import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution {/* * 二叉树的非递归后序遍历,采用Java实现 * 因为下面程序采用了该方法 */public static void postOrder(TreeNode root){Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode p = null;TreeNode b = root;int flag;do{while(b!=null){stack.push(b);b = b.left;}p = null;flag = 1;while(!stack.isEmpty() && flag==1){b = stack.peek();if(b.right==p){System.out.println(b.val);stack.pop();p = b;}else{b = b.right;flag = 0;}}}while(!stack.isEmpty());}/* * 解答Path Sum问题的源程序,采用了树的非递归后序遍历的思想 */public boolean hasPathSum(TreeNode root, int sum) {        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode q = null;        TreeNode b = root;        int flag;        boolean flagAll = false;        do{        while(b!=null){        stack.push(b);        b = b.left;        }        q = null;        flag = 1;                while(!stack.isEmpty() && flag==1){        b = stack.peek();        if(b.right==q){        if(b.left==null && b.right==null){        List<TreeNode> pathList = new ArrayList<TreeNode>();        while(!stack.isEmpty()){        TreeNode x = stack.pop();        pathList.add(x);        }        int sum1 = 0;        for(int i = 0;i<pathList.size();i++){        sum1+=pathList.get(i).val;        }        if(sum1==sum){        flagAll = true;        break;        }        //return true;        for(int i = pathList.size()-1;i>=0;i--){        stack.push(pathList.get(i));        }        }        stack.pop();        q = b;        }else{        b = b.right;        flag = 0;        }        }        }while(!stack.isEmpty());        return flagAll;    }public static void main(String[] args) {TreeNode root = new TreeNode(5);TreeNode l1 = new TreeNode(4);TreeNode l2 = new TreeNode(8);root.left = l1;root.right = l2;TreeNode l3 = new TreeNode(11);l1.left = l3;TreeNode l4 = new TreeNode(13);l2.left = l4;TreeNode l5 = new TreeNode(4);l2.right = l5;postOrder(root);System.out.println(new Solution().hasPathSum(root, 17));}}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}


0 0
原创粉丝点击