首页 > 编程语言 >代码随想录算法训练营第二十天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

代码随想录算法训练营第二十天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

时间:2023-06-29 15:58:46浏览次数:36  
标签:right 随想录 二叉 high 搜索 low root curNode left

669. 修剪二叉搜索树

思路

递归法: 

需要思考清楚,如果当前节点<low,那么就返回递归它的右节点,而不是自己取判断,找出来一个合适的节点,这样的话会越想越乱

代码:

 1 TreeNode* trimBST_cursor(TreeNode* root, int low, int high) {
 2     if (!root) return nullptr;
 3 
 4     if (root->val < low)
 5     {
 6         return trimBST_cursor(root->right, low, high);
 7     }
 8 
 9     if (root->val > high)
10     {
11         return trimBST_cursor(root->left, low, high);
12     }
13 
14     if (root->left)
15     {
16         root->left = trimBST_cursor(root->left, low, high);
17     }
18 
19     if (root->right)
20     {
21         root->right = trimBST_cursor(root->right, low, high);
22     }
23 
24     return root;
25 }

迭代法:

需要先把当前的root,放到符合标准的区间里,这样不管左子树的右孩子,再怎么大,也不会大过root,所以他也就不会超过high

代码

 1 TreeNode* trimBST(TreeNode* root, int low, int high) {
 2     if (!root) return nullptr;
 3 
 4     //当前root位于最近的[]范围里
 5     while (root&&(root->val<low||root->val>high))
 6     {
 7         if (root->val < low)
 8             root = root->right;
 9         else if (root->val > high)
10             root = root->left;
11     }
12 
13     //让cur = root,开始向左遍历,如果左孩子小于low,那么就一直遍历它的右孩子,直到它的右孩子>low
14     auto curNode = root;
15     while (curNode)
16     {
17         while (curNode->left && curNode->left->val < low)
18         {
19             curNode->left = curNode->left->right;
20         }
21         //遇到一个左孩子小于的话,那么就把他删掉
22         curNode = curNode->left;
23     }
24 
25     curNode = root;
26     while (curNode)
27     {
28         while (curNode->right && curNode->right->val > high)
29         {
30             curNode->right = curNode->right->left;
31         }
32 
33         curNode = curNode->right;
34     }
35 
36     return root;
37 }

 

标签:right,随想录,二叉,high,搜索,low,root,curNode,left
From: https://www.cnblogs.com/smartisn/p/17514386.html

相关文章

  • 二叉树-前序遍历-leetcode222
    给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~2h个节点。示例1:输入:root=[1,2,3......
  • PCWorld:微软Google进军社交搜索需解决八问题
    本文发表于2009-10-2708:5011/2/200911:48:24AM美国知名IT杂志《PCWorld》昨日撰文称,搜索大战中Google曾一直领先,直到日前Bing宣布将整合来自Twitter等社交网站的实时信息。Google也在当天宣布与Twitter达成合作。但二者仍面临着许多亟待解决的问题。以下是文章摘要:搜索引擎大......
  • 搜索学习笔记
    MeetInTheMiddle折半搜索将需要搜索的数据集分成两部分,在两部分用\(f(n/2)\)的时间复杂度分别搜索,之后用\(g(n)\)的时间复杂度合并。如果\(g(n)\)和\(f(n/2)\)同级,那么解决问题的时间复杂度就能折半。......
  • 隐藏桌面快捷搜索栏
    修改文档:packages/apps/Launcher3/src/com/android/launcher3/config/FeatureFlags.java修改内容: 逻辑分析:packages/apps/Launcher3/src/com/android/launcher3/qsb/QsbContainerView.java此方法决定是否显示QSB ......
  • 剑指 Offer 27. 二叉树的镜像
    请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4  /  2  7 /\ /1 36 9镜像输出:4  /  7  2 /\ /9 63  1示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]来源:力扣(LeetCode)链接:https://lee......
  • 在vscode搜索两个关键词?
    在VSCode中,您可以使用以下方法搜索两个关键词: ①使用正则表达式搜索:打开搜索功能:按下Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(Mac)。在搜索框中输入要搜索的关键词,使用正则表达式的语法。例如,如果要搜索同时包含关键词"keyword1"和"keyword2"的内容,可以使用正......
  • 搜索语义模型的大规模量化实践
    作者|把酒问青天导读经过近几年的技术演进,语义模型在百度搜索场景中被广泛地应用,消耗了大量的GPU资源,模型压缩技术也随之得到大量研究和实践。通过兼顾推理性能、业务效果和迭代效率的优化目标,我们成功地将INT8量化技术大面积地应用到了搜索场景中,极大地提高了资源效能。此外,目前......
  • 5分钟了解二叉树之红黑树
    转载请注明出处:https://i.cnblogs.com/posts/edit;postId=16032891 书接上一回。上一篇已经讲解到了AVL树,这一篇会接着讲另一个重量级的数据结构:红黑树。红黑树红黑树是一种自平衡二叉搜索树。每个节点存储一个表示“颜色”(“红色”或“黑色”)的额外位,用于确保树在插入和删......
  • 7-7 平衡二叉树的根
    将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。输入格式:输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。输出格式:在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。输入样例1:5887061......
  • 头条搜索精选 参数分析
    本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!头条搜索精选参数分析环境win10Python3.9Chrome抓包接口分析主要是需要这一块的内容通过抓包分析发......