算法

二叉树的路径之和

2020-10-25  本文已影响0人  小鱼嘻嘻

问题1

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

说明: 叶子节点是指没有子节点的节点。

原理

代码

class Solution {
    public boolean hasPathSum(TreeNode root, int sum) {
       if(root==null){
           return false;
       }
       sum =  sum-root.val;
       if(root.left==null&&root.right==null&&sum==0){
           return true;
       }
       return hasPathSum(root.left,sum)||hasPathSum(root.right,sum);
    }    
}

注意事项

问题2

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

原理

代码

class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> list = new ArrayList<>();
        if(root==null){
            return list;
        }
        backTrace(list,new ArrayList<>(),root,sum);
        return list;
    }

    private void backTrace( List<List<Integer>> list,List<Integer> clist,TreeNode root, int sum){
        if(root==null){
            return ;
        }

        clist.add(root.val);
        sum = sum - root.val;

        if(root.left==null&&root.right==null&&sum==0){
            list.add(new ArrayList<>(clist));
            return ;
        }
       if(root.left!=null){
           backTrace(list,clist,root.left,sum);
            clist.remove(clist.size()-1);
       }
       if(root.right!=null){
            backTrace(list,clist,root.right,sum);
            clist.remove(clist.size()-1);
       }
        
    }
}

注意事项

问题3

给定一个二叉树,它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

原理

代码

class Solution {
    int count = 0;
    public int pathSum(TreeNode root, int sum) {
        if(root==null){
            return 0;
        }
        findSum(root,sum);
        pathSum(root.left,sum);
        pathSum(root.right,sum);
        return count;
    }

    private void findSum(TreeNode root, int sum){
        if(root==null){
            return ;
        }
        sum = sum -root.val;
        if(sum==0){
            count++;
        }
        findSum(root.left,sum);
        findSum(root.right,sum);
    }
}

注意事项

上一篇下一篇

猜你喜欢

热点阅读