二叉树路径总和

///路径总和I

路径总和leetcode链接

/*

1.确定递归函数的参数和返回类型

参数:需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型。

*/

private boolean traversal(TreeNode root, int count){

    if (root ==null){

        return false;

    }

    /*

    2.确定终止条件

    首先计数器如何统计这一条路径的和呢?

    不要去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。

    如果最后count == 0,同时到了叶子节点的话,说明找到了目标和。

    如果遍历到了叶子节点,count不为0,就是没找到。

    */

    if (root.left ==null && root.right ==null && count ==0){

        return true;

    }

    if (root.left ==null && root.right ==null ){

        return false;

    }

    /*

    3.确定单层递归的逻辑

    因为终止条件是判断叶子节点,所以递归的过程中就不要让空节点进入递归了。

    如果未找到满足条件的,记得回溯

    */

    if (root.left){

        count -= root.left.val;

        traversal(root.left, count); //递归

        count += root.left.val; //不满足条件,回溯

    }

    if (root.right){

        count -= root.right.val;    //

        traversal(root.right, count); //递归

        count += root.right.val;    //不满足条件,回溯

    }

    return false

}



/// 路径总和II

路径总和II LeetCode链接

public List> pathsumII(TreeNode root, int count){

    List> res =new ArrayList<>();

    if (root ==null) {

        return res;

    }

    List path =new ArrayList<>();

    traversalII(root, count, res, path);

    return res;

}

private void traversalII(TreeNode root, int count, List> result, List path){

    path.add(root.val);

    if (root.left ==null && root.right ==null && count ==0){

        result.add(path);

        return;

    }

    if (root.left){

        count -= root.left.val; //count减去当前节点值

        path.add(root.left.val);    //添加当前值

        traversal(root.left, count);    //递归

        count += root.left.val; //回溯

        path.remove(path.size()-1);

    }

    if (root.right){

        count -= root.right.val;    //count进去当前节点值

        path.add(root.right.val);  //添加当前值

        traversalII(root.right, count); //递归

        count += root.right.val;    //回溯

        path.remove(path.size()-1);

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容