zoukankan      html  css  js  c++  java
  • 根节点到叶子节点路径之和为target

    //递归吧,但是在递归到底的条件上要判断好,比如说完整路径是到叶子节点,也就是说左右子节点都为空,并且这时候的root.val==target表示找到了一个list,再返回。

    但是因为我并没有直接就用target-root.val,所以在有些情况下,比如说遇到一个null节点的时候,我们不能直接返回,需要给这个list加一个值,因为返回到上一层之后我们会remove掉list中的最后一个元素,所以我们每次递归的时候都要给list加一个元素,不然返回到上一层的时候节点元素对不上,这是一个要注意的点,

    还有就是如果它不是叶子节点,并且这时候的root.val>=target了,也就是下面那个else,我们就可以不继续递归下去了,直接返回就可以了,

    **或者说你可以上来就直接把val值给弄掉,这样有的时候就不需要给list加一个无关紧要的值了,但是这个结束就是target==0了。

     1 import java.util.ArrayList;
     2 /**
     3 public class TreeNode {
     4     int val = 0;
     5     TreeNode left = null;
     6     TreeNode right = null;
     7 
     8     public TreeNode(int val) {
     9         this.val = val;
    10 
    11     }
    12 
    13 }
    14 */
    15 public class Solution {
    16     ArrayList<ArrayList<Integer>> res=new ArrayList<>();
    17     public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
    18         ArrayList<Integer> list=new ArrayList<>();
    19         if(root==null)
    20             return res;
    21         helper(root,target,list);
    22         return res;
    23     }
    24     public void helper(TreeNode root, int target,ArrayList<Integer> list)
    25     {
    26          if(root==null)
    27           {
    28             list.add(0);
    29              return ;
    30          }
    31         if(root.left==null&&root.right==null)
    32         {
    33             if(root.val==target)
    34             {
    35                 list.add(root.val);
    36                 res.add(new ArrayList<Integer>(list));
    37                 return ;
    38             }
    39             else
    40                 {
    41                 list.add(0);
    42                  return ;
    43          }
    44         }
    45         if(root.val<target)
    46         {
    47             list.add(root.val);
    48             helper(root.left,target-root.val,list);
    49             list.remove(list.size()-1);
    50             helper(root.right,target-root.val,list);
    51             list.remove(list.size()-1);
    52         }
    53         else
    54             {
    55                 list.add(0);
    56                 return ;
    57         }
    58         return ;
    59         
    60     }
    61 }
  • 相关阅读:
    java jdk1.8 32/64位 官方绿色版下载附安装教程
    坡度常用的表示方法
    就此道别
    阿里巴巴矢量图标库(iconfont)批量全选的方法
    thinkphp6.0 集成Alipay 手机和电脑端支付的方法
    法定的属于我的第23个年头已经结束,在今天迎来第24年的第一天。
    世界地图展开图,来自 Simon's World Map
    thinkphp6.0 composer 安装 web-token/jwt-framework 常见出错原因分析及解决方法
    thinkphp6 常用方法文档
    Python获取列表中的最后一个或者倒数第几个的方案
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11546936.html
Copyright © 2011-2022 走看看