新手算法学习之路----二叉树(二叉树的路径和)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手算法学习之路----二叉树(二叉树的路径和)相关的知识,希望对你有一定的参考价值。

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

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

代码加思路

public List<List<Integer>> binaryTreePathSum(TreeNode root, int target) {
         List<List<Integer>> Result = new ArrayList<>();
         List<Integer> path= new ArrayList<Integer>();
         if(root == null){
             return Result;
         }
         path.add(root.val);
         helper(Result, path,root.val,target,root);  //这里的根节点的值我一开始忘记加了,这是我的一个错误
         return Result;
    }
    private void helper(List<List<Integer>>Result, List<Integer>path, int sum, int target, TreeNode root){
        if(root.left == null&&root.right == null){//判断已到达了叶子节点,如果到达了叶子节点的话还没有和sum相等的话那就放弃这个path数组
            if(sum == target){
                Result.add(new ArrayList<Integer>(path));
            }
            return;
        }
        if(root.left!= null){  //左子树
            path.add(root.left.val);
            helper(Result,path, sum+root.left.val, target,root.left);
            path.remove(path.size()-1);  //这个remove的作用是,如果找到了sum==target的路径的话,由于每一在遍历左子树的时候就已经把每一个节点add到path数组里面了,在最后一个节点那里也已经将path值添加到了Result值里面了,所以要将path清空留个下一个右节点。同时要想合理的删除path里面的内荣最好的办法就是从后往前删,这是remove的一个弊端。
        }
        if(root.right != null){
            path.add(root.right.val);
            helper(Result,path,sum+root.right.val, target, root.right);
            path.remove(path.size()-1);
        }
    }

 

以上是关于新手算法学习之路----二叉树(二叉树的路径和)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法学习笔记 树

数据结构与算法学习笔记 树

数据结构与算法学习笔记 树

二叉树算法

100天算法入门 - 每日三题 - Day10二叉树的所有路径各位相加丑数

二叉树的外路径长、内路径长及相互关系公式证明