首页 > 编程语言 >算法训练day23 LeetCode669.108.538.

算法训练day23 LeetCode669.108.538.

时间:2023-10-01 23:33:08浏览次数:49  
标签:right TreeNode day23 traversal LeetCode669.108 return 538 root left

算法训练day23 LeetCode669.108.538.

669.修剪二叉搜索树

题目

669. 修剪二叉搜索树 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 递归

    • 不能单纯地由根节点的值直接删除单值,需要继续判断子节点是否符合条件

    • class Solution
      {
      public:
          TreeNode *trimBST(TreeNode *root, int low, int high)
          {
              if (root == NULL)
                  return NULL;
              if (root->val < low)
              {
                  TreeNode *right = trimBST(root->right, low, high);
                  return right;
              }
              if (root->val > high)
              {
                  TreeNode *left = trimBST(root->left, low, high);
                  return left;
              }
              root->left = trimBST(root->left, low, high);
              root->right = trimBST(root->right, low, high);
              return root;
          }
      };
      

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

题目

108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 递归

    • 从数组中取中点,不断切割数组递归地构造树符合平衡二叉树的定义

    • 
      class Solution
      {
      private:
          TreeNode *traversal(vector<int> &nums, int left, int right)
          {
              if (left > right)
                  return NULL;
              int mid = left + ((right - left) / 2);
              TreeNode *root = new TreeNode(nums[mid]);
              root->left = traversal(nums, left, mid - 1);
              root->right = traversal(nums, mid + 1, right);
              return root;
          }
      
      public:
          TreeNode *sortedArrayToBST(vector<int> &nums)
          {
              TreeNode *root = traversal(nums, 0, nums.size() - 1);
              return root;
          }
      };
      

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

题目

538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 递归

    • 因为二叉搜索树是有序的,每个节点的新值等于右侧子树的旧值总和--->以右左中遍历做累加

    • class Solution
      {
      private:
          int pre = 0;
          void traversal(TreeNode *cur)
          {
              if (cur == NULL)
                  return;
              traversal(cur->right);
              cur->val += pre;
              pre = cur->val;
              traversal(cur->left);
          }
      
      public:
          TreeNode *convertBST(TreeNode *root)
          {
              pre = 0;
              traversal(root);
              return root;
          }
      };
      

总结

  • 树的遍历方式
    • 深度优先(栈实现)
      • 前序遍历、中序遍历、后序遍历
    • 广度优先(队列实现)
      • 层序遍历
  • 树和数组转换
    • 按特定方式切割数组 --->树
    • 树按特定方式遍历 ---> 数组
  • 二叉搜索数
    • 要用树和数组的视角来看待搜索树,根据其有序的特性解决问题
  • 待补充

标签:right,TreeNode,day23,traversal,LeetCode669.108,return,538,root,left
From: https://www.cnblogs.com/High-source/p/17739607.html

相关文章

  • P9538最大和
    题目简化给你一个数,从它的个位到最高位进行操作,对于其每一位,你可以选择让他增加\(1\),减少\(1\)(如果当前位是\(0\),减\(1\)后会退位)或者不变。分析要使每一位的总和最大,我们可以对每一位进行判断。如果当前位不是\(0\)和\(9\),那么显然要加一。如:\(12\),最大总和即为每......
  • 2021-7-23-Holiday23
    layout:posttitle:xtx暑假第二三周日志categories:日志tags:-日志-2021暑期日志BGImage:'https://github.xutongxin.me/https://raw.githubusercontent.com/xutongxin1/PictureBed/master/img0/20210904201804.png'jekyll-theme-WuK:musicid:'416......
  • 锁表查询,转载 https://www.toutiao.com/article/7275538336188695099/?channel=&sourc
    Oracle死锁与慢查询总结 查看死锁SELECTs.sid"会话ID",s.lockwait"等待锁",s.event"等待的资源/事件",--最近等待或正在等待的资源/事件DECODE(lo.locked_mode,0,'尚未获得锁',1,NULL,2,'行共享锁',3,'行排它锁',4,'共享表锁',5,�......
  • 代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜
     669. 修剪二叉搜索树    卡哥建议:这道题目比较难,比 添加增加和删除节点难的多,建议先看视频理解。   题目链接/文章讲解:https://programmercarl.com/0669.%E4%BF%AE%E5%89%AA%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html   视频讲解:https://www.......
  • MySQL之InnoDB存储结构 转载 https://juejin.cn/post/7253816086679846972
    1InnoDB存储引擎InnoDB存储引擎最早由InnobaseOy公司开发(属第三方存储引擎)。从MySQL5.5版本开始作为表的默认存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,非常适合OLTP场景的应用使用。目前也是应用......
  • day23日
    一、找找找1.010打开zip文件末尾,发现了一个png图片和一段base64,base64解密后为flag666,图片显示crc有错误,010打开发现宽度值为0,使用脚本进行爆破点击查看代码importzlibimportstructfilename='crc.png'withopen(filename,'rb')asf:all_b=f.read()crc3......
  • 题解 P1538 【迎春舞会之数字舞蹈】
    postedon2021-06-0113:24:05|under题解|source给\(0\cdots9\)每个数字打表,打它在相应的位置有没有一划。然后把每个数字分成\(5\)部分,暴力输出即可。#include<cstdio>#include<cstring>usingnamespacestd;constchar*db[]={"-||||-","||"......
  • 【每日一题】Problem 538B. Quasi Binary
    原题解决思路最简单的思路就是贪心了,每次生成不超过目标值的\(quasibinary\),即可使最终数量最少#include<bits/stdc++.h>intquasibinary(intmax){intres=0;intp=0;while(max>0){if(max%10>0){res+=int(pow(10,......
  • 题解 P5384
    这题有紫??对于询问节点\(u\),倍增地跳到它的\(k\)级祖先,求其子树内有多少深度为\(dep_u\)的节点。我们考虑把询问离线,再通过dfs序把树拍平,然后扫一遍直接求就行了。复杂度\(O(n\logn)\)。code:#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+5;inlin......
  • vue-day23--v-html指令
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>v-html指令</title><script......