面试题34. 二叉树中和为某一值的路径(Java)(递归)

题目链接:面试题34. 二叉树中和为某一值的路径
题目描述:在这里插入图片描述
这个题首先看就是一个普普通通的深搜,遍历一遍就出答案了,然后我踩了两个坑(因为没好好审题)说一下

  1. 起初以为起点随便从哪里开始都可以,于是先存了一下所有节点
  2. 没注意终点必须是叶节点(叶节点的定义是下面没有其他节点的节点),最坑的样例就是[1,2] 1返回null,[1] 1 返回[[1]].
    然后就是非常简单的题了:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<List<Integer>> ans;
    List<Integer> temp;
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        if(root==null) return new ArrayList();
        ans=new ArrayList<>();
        temp=new ArrayList<>();
        gettemp(root,target,root.val );
        return ans;
    }
    public void gettemp(TreeNode root,int target,int num){
        temp.add(root.val);
        //判断是不是叶节点
        if(num==target&&root.left==null&&root.right==null){ ans.add(new ArrayList<>(temp));temp.remove(temp.size()-1); return;}
        if(root.left!=null) gettemp(root.left,target,num+root.left.val);
        if(root.right!=null) gettemp(root.right,target,num+root.right.val);
        temp.remove(temp.size()-1);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值