首页 > 其他分享 >[刷题记录Day 23]Leetcode二叉树

[刷题记录Day 23]Leetcode二叉树

时间:2023-09-09 21:11:05浏览次数:47  
标签:node right return 递归 23 二叉树 root Leetcode left

No.1

题目

修剪二叉搜索树

思路

  • 递归法
  • 有点抽象,要对具体案例做模拟才好懂

递归分析

  1. 返回值:节点,参数:节点,[下界,上界]
  2. 终止条件:遇到空节点,返回空
  3. 单层递归逻辑:判断不在范围内的情况:当前节点小于下界/大于上界,直接返回右/左子树递归结果;若在范围内,则递归筛查左右子树,返回当前节点

代码

public TreeNode trimBST(TreeNode root, int low, int high) {  
    if (root == null)  
        return null;  
  
    if (root.val < low)  
        return trimBST(root.right, low, high);  
    if (root.val > high)  
        return trimBST(root.left, low, high);  
    root.left = trimBST(root.left, low, high);  
    root.right = trimBST(root.right, low, high);  
  
    return root;  
}

No.2

题目

将有序数组转换为二叉搜索树

思路

  • 有序数组转BST,还要求高度平衡
  • 递归法,分割区间

递归分析

  1. 返回值:节点,参数:数组,[下界,上界)
  2. 终止条件:下界大于等于上界,返回空
  3. 单层递归分析:以中点分割,递归左右子树

代码

public TreeNode helper(int[] nums, int left, int right) {  
    if (left >= right)  
        return null;  
  
    int midIndex = left + (right - left) / 2;  
    TreeNode node = new TreeNode(nums[midIndex]);  
    node.left = helper(nums, left, midIndex);  
    node.right = helper(nums, midIndex + 1, right);  
      
    return node;  
}  
  
public TreeNode sortedArrayToBST(int[] nums) {  
    return helper(nums, 0, nums.length);  
}

No.3

题目

把二叉搜索树转换为累加树

思路

  • 递归反中序遍历
  • 全局变量pre

递归分析

  1. 返回值:空,参数:子树的根
  2. 终止条件:遇到空节点,返回;
  3. 单层递归逻辑
    1. 递归右子树;
    2. 更新根节点累加值,记录到pre
    3. 递归左子树;

代码

private int preVal = 0;  
public void convertHelper(TreeNode node) {  
    if (node == null)  
        return;  
  
    convertHelper(node.right);  
    node.val += preVal;  
    preVal = node.val;  
    convertHelper(node.left);  
}  
  
public TreeNode convertBST(TreeNode root) {  
    convertHelper(root);  
    return root;  
}

标签:node,right,return,递归,23,二叉树,root,Leetcode,left
From: https://www.cnblogs.com/tomatoQt/p/17690145.html

相关文章

  • JOISC 2023 纪录
    记录一下JOISC2023的做题记录Day1T1TwoCurrencies给定一棵树,在边上有总计\(m\)个检查站,经过一个检查站需要叫\(1\)枚金币或者若干枚银币。\(Q\)次询问,问一个人有\(X\)枚金币和\(Y\)枚银币,能否从\(u\)走到\(v\),同时回答最多可以留下多少枚金币。发现一定是......
  • 2023.9.9——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午数学建模比赛,下午数学建模比赛。我了解到的知识点:1.学习使用excel的分列、分类汇总以及一些其他函数2.学习并完成zookeeper的安装;明日计划:1.完成数学建模比赛;2.完成HBase的安装;......
  • 20230909学习总结hbase命令大全
    bin/hbase进入hbaseShell命令模式create'student','Sname','Ssex','Sage','Sdept','course'创建student表,属性'Sname','Ssex','Sage','Sdept','course'put......
  • Adobe Lightroom Classic 2023最新(LrC12.5版本)安装下载
    AdobeLightroomClassic2023(LrC2023)使用针对桌面优化的应用程序编辑和整理您的照片。LightroomClassicCC为您提供强大的一键式工具和高级控件,让您的照片看起来很棒。轻松整理桌面上的所有照片,并以多种方式分享。迅雷云盘分享:https://pan.xunlei.com/s/VNdoEonKpUhx6XHs_H9Iw......
  • 2023-09-09学习记录
    NettyUnpooled疑惑Netty中的Unpooled类,ByteBufhttps://www.jianshu.com/p/dc7782cb31fcNettyChannelGroup疑惑ChannelGroup详解https://www.jianshu.com/p/0fead0912ef3Netty心跳知识点IdleStateHandleruserEventTriggered疑惑Netty实现心跳......
  • [羊城杯2023RE]WP
    目录ReverseCSGOvm_woEz加密器BlastReverseCSGOGo逆向静态不好看,考虑动调在main_init有IsDebuggerPresent反调试,nop掉看一眼findcrypt插件,识别到base64看看main_mainmain__Cfunc_enc_abi0是加密runtime_memequal是最后的check,base64完是60位说明flag为44位在81行下......
  • 2023-09-05 图论专项训练(五)
    我TM但凡有点水平也不至于一点水平没有吧。——每日感想T1距离/P4162[SCOI2009]最长距离这道题本质上是一道十分弱智的搜索题,无论是开DFS还是开BFS还是开BDFS都能做。本人在这里不建议使用使用deque进行BFS,理由是运行速度比较慢,稍有不慎就见祖宗了。我在这里使用DFS,但是纯......
  • 2023版标准地图
    水系名称字号规范按自然形状、走向注出、依其面积大小和长度选择字号,但江、河上游和支流的名称字号,不能超过下游和主流的名称字号,另外,名称一般注在河=流、湖泊的内部,当内部不能容纳时,可注在外侧地面河流a代表岸线,b代表高水位岸线湖泊有名称的应加注名称湖泊水是咸水(矿化......
  • LeetCode207——课程表
    你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses-1 。在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i]=[ai,bi] ,表示如果要学习课程 ai 则 必须 先学习课程  bi 。例如,先修课程对 [0,1] 表......
  • SMU Autumn 2023 Round 1(Div.1)
    SMUAutumn2023Round1(Div.1)A.SetorDecrease(枚举)题意就是你可以进行两种操作,将\(a_i-1\)或者令\(a_i\)等于\(a_j\),然后使得\(\sum\limits_{i=1}^{n}a_i\leqk\),求最少的操作步数首先我们让一个大数变成一个最小数的贡献肯定是要比让大数减一产生的贡献更多,所以我......