zoukankan      html  css  js  c++  java
  • lintcode:二叉树的路径和

    题目

    给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。

    一个有效的路径,指的是从根节点到叶节点的路径。

    解题

    下面有个小bug

    最后比较的时候是叶子节点为空,左右都有叶子结点,所有会出现重复的情况,聪明的你可能会想到保留不重复的结果

    但是但一个树的结点都相同时候就不可以了

    两层,三个结点,每个节点都是1,路径和是2

    这样就有两个个答案[1,1]、[1,1]

    所以再是叶子结点时候就要进行判断,这里的叶子结点要是真叶子节点,左右节点为空而自己不空

    public class Solution {
        /**
         * @param root the root of binary tree
         * @param target an integer
         * @return all valid paths
         */
        public List<ArrayList<Integer>> binaryTreePathSum(TreeNode root, int target) {
            // Write your code here
            ArrayList<Integer> list = new ArrayList<Integer>();
            List<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            PathSum(root,target,result,list);
            return result;
        }
        public void PathSum(TreeNode root,int target,List<ArrayList<Integer>> result,ArrayList<Integer> list){
            if(target ==0 && root==null){
                ArrayList<Integer> l = new ArrayList<Integer>(list);
                if(!result.contains(l))
                    result.add(l);
                return;
            }
            if( root==null)
                return;
            int val = root.val;
            list.add(val);
            
            ArrayList<Integer> list2 = new ArrayList<Integer>(list); 
        
    PathSum(root.left,target
    -val,result,list);      list.remove(list.size()-1); PathSum(root.right,target-val,result,list2); list2.remove(list2.size()-1); } }

    AC代码

    public class Solution {
        /**
         * @param root the root of binary tree
         * @param target an integer
         * @return all valid paths
         */
        public List<ArrayList<Integer>> binaryTreePathSum(TreeNode root, int target) {
            // Write your code here
            ArrayList<Integer> list = new ArrayList<Integer>();
            List<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            PathSum(root,target,result,list);
            return result;
        }
        public void PathSum(TreeNode root,int target,List<ArrayList<Integer>> result,ArrayList<Integer> list){
            if( root==null)
                return;
                
            if( (target ==root.val) && root.left==null && root.right==null){
                list.add(root.val);
                ArrayList<Integer> l = new ArrayList<Integer>(list);
                // if(!result.contains(l))
                    result.add(l);
                return;
            }
            
            int val = root.val;
            list.add(val);
    
            ArrayList<Integer> list2 = new ArrayList<Integer>(list); 
            PathSum(root.left,target-val,result,list);
            list.remove(list.size()-1);
            PathSum(root.right,target-val,result,list2);
            list2.remove(list2.size()-1);
        }
    }
  • 相关阅读:
    1系统负荷
    动画
    日常问题记录--JSP页面中通过<s:property value="#parameters.userName[0]>获取URL参数中文时为乱码的解决办法
    linux下替换一个文件中的所有中文字符的方法
    日常问题记录--getJSON函数不执行回调函数的原因总结
    日常问题记录-- java.util.NoSuchElementException
    日常问题记录--POST时,struts2的 request.getParameter找不到参数
    日常问题记录--nested exception is java.lang.NoClassDefFoundError: org/apache/oro/text/regex/MalformedPatternExcept
    mysql系统搭建互备DB(双主)记录
    使用forEach函数绑定函数的上下文
  • 原文地址:https://www.cnblogs.com/theskulls/p/5625102.html
Copyright © 2011-2022 走看看