前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道剑指offer-二叉树中和为某一值的路径

每天一道剑指offer-二叉树中和为某一值的路径

作者头像
乔戈里
发布2019-09-17 16:33:54
2700
发布2019-09-17 16:33:54
举报
文章被收录于专栏:Java那些事Java那些事

前言

今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。

昨天的题解

题目

每天一道剑指offer-二叉树中和为某一值的路径 来源: https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目详述

输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

题目详解

思路

  • 递归的思想,每次去判断左子树的最右边界是不是大于右子树的最左边界,如果大于就不是,如果小于,那么就再往下递归。

代码

代码语言:javascript
复制
public class Solution {
    ArrayList<ArrayList<Integer>> resultList = new ArrayList<>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {

        ArrayList<Integer> list = new ArrayList<>();
        FindPath(root,target,0,list);
        return resultList;
    }
    public void FindPath(TreeNode root,int target,int sum,ArrayList<Integer> list)
    {
        if(root == null)
            return;
        sum += root.val; //sum不是引用,所以sum在每一层的递归中都是不同的值,记录当前的节点和
        list.add(root.val);
        if(sum == target && root.left == null && root.right == null)
        {//找到这样的路径了~
            resultList.add(new ArrayList<Integer>(list));//存入结果数组
            list.remove(list.size()-1);//找到以后还要接着找啊,所以先把当前最后的叶子节点删除
            return;
        }
        FindPath(root.left,target,sum,list);//左右子树递归进去去找
        FindPath(root.right,target,sum,list);
        list.remove(list.size()-1);//这里左右子树都找完了,回到了找完的左右子树的父节点
        //由于父节点的左右子树找完了,所以父节点这里也没有用了,把父节点删除
    }
}

代码截图(避免乱码)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 昨天的题解
    • 题目
      • 题目详述
        • 题目详解
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档