【leetcode】897. 递增顺序搜索树(increasing-order-search-tree)(dfs)[简单]

2023-05-16

链接

https://leetcode-cn.com/problems/increasing-order-search-tree/

耗时

解题:31 min
题解:17 min

题意

给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。

提示:

  • 树中节点数的取值范围是 [1, 100]
  • 0 <= Node.val <= 1000

思路

维护一个 上一节点 的指针,这一指针指向当前节点在 答案树 中它的父节点。

初始化这个指针指向空,当找到最左子节点时,第一次给 上一节点 的指针赋值;并把最左子节点记录下来,这就是题意要返回的 头节点

dfs遍历访问节点时就把 上一节点 的左子节点指向空,右子节点指向当前节点。然后再把当前节点赋给 上一节点 。直到遍历结束。

细节: 遍历结束需要把 上一节点 的左子节点置空,否则可能会造成一个 环,并且答案也就不对了。

时间复杂度: O ( n ) O(n) O(n)

AC代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    TreeNode* last_node;
    TreeNode* head_node;
public:
    void dfs(TreeNode* root) {
        if(root == NULL) return ;
        dfs(root->left);
        if(last_node != NULL) {
            last_node->left = NULL;
            last_node->right = root;
        }
        else {
            head_node = root;
        }
        last_node = root;
        dfs(root->right);
    }
    
    TreeNode* increasingBST(TreeNode* root) {
        dfs(root);
        last_node->left = NULL;
        return head_node;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】897. 递增顺序搜索树(increasing-order-search-tree)(dfs)[简单] 的相关文章

  • 检查文件中是否存在所有多个字符串或正则表达式

    我想检查一下是否all我的字符串存在于文本文件中 它们可以存在于同一行或不同行上 部分匹配应该没问题 像这样 string1 string2 string3 string1 string2 string1 string2 string3 s
  • 如何在 IntelliJ IDEA 中搜索特定代码块?

    我如何搜索withinIntelliJ IDEA 中的特定代码块或选择 I got used to using this feature in Eclipse In Eclipse you can just double click on
  • php Extract 从谷歌图像搜索中对此图像结果的最佳猜测?

    我有一个要求 我必须在谷歌上反向查找图像并提取打印在 此图像的最佳猜测 标题上的名称 不 我对网上现有的curl代码做了一些修改 并走到了这一步
  • 如何将我的 Magento 迷你搜索表单移动到模板标题中的另一个位置?

    我正在构建我的第一个自定义 Magento 主题 虽然进展缓慢 但是is去 我去掉了主页上最初保存迷你搜索表单的栏 而是想将搜索表单放入新标题中 这是我的标题的代码header phtml div a href title class lo
  • 在jsp中处理浏览器的“后退”按钮

    我有一个jsp搜索页面 Search jsp 和一个结果页面 Result jsp 它们都可以选择搜索条件 然后将参数传递给java控制器文件 Controller java 以构建查询字符串并执行查询搜索 查询字符串和搜索结果将传递到 R
  • 如何在数组中搜索字符串的一部分?

    我有一个arraylist
  • python 使用图像谷歌图像进行搜索

    我在用 python 搜索谷歌图像搜索时遇到了非常困难的情况 我需要只使用标准 python 库 所以 urllib urllib2 json 有人可以帮忙吗 假设图像是 jpeg jpg 并且位于我运行 python 的同一文件夹中 我尝
  • MongoDB - 使用全文搜索搜索单词和短语时的逻辑 OR

    我之前问过一个相关问题 根据发帖者的建议 创建了这个新问题作为后续问题 MongoDB 全文搜索 匹配单词和精确短语 https stackoverflow com questions 28368883 mongodb full text
  • 如何在 1 维和 n 维空间中有效地选择模拟退火的邻居

    我想使用模拟退火在某个预定义的区间内找到单变量多项式函数的局部最小值 我还想尝试找到二次函数的全局最小值 像这样的无导数算法并不是解决该问题的最佳方法 因此这仅用于研究目的 虽然算法本身非常简单 但我不确定如何在单维或 n 维空间中有效地选
  • 如何在手机SD卡或其他位置搜索文件

    我想搜索用户移动设备上具有特定扩展名的文件 我尝试搜索但找不到任何直接的 API 是否有特定的 API 或者是否有实现相同目的的繁琐方法 或者是否有一种机制可以调用 linux 调用 find 或类似的东西 Thanks boolean i
  • Python - “in”语句搜索对象列表的速度很慢

    我希望有人能解释为什么搜索对象引用列表比搜索普通列表慢得多 这是使用 python in 关键字进行搜索 我认为它以 C 编译器 速度运行 我认为列表只是对象引用 指针 的数组 因此搜索应该非常快 两个列表在内存中的大小正好是 412236
  • 在 lucene 中搜索 UUID 不起作用

    我有一个 UUID 字段 以以下格式添加到我的文档中 372d325c e01b 432f 98bd bc4c949f15b8 但是 当我尝试通过 UUID 查询文档时 无论我如何尝试转义表达式 它都不会返回它们 例如 uuid 372d3
  • 使用多个字段对 solr 搜索结果进行排序 (solrj)

    我需要根据两个因素对从 apache solr 返回的结果进行排序 我们的系统中有三个实体由 solr 索引 组 项目和数据集 在结果中我希望首先显示数据集 然后是项目 然后是组 但我仍然希望它尊重每种类型的评分值 因此 例如 结果将是 得
  • 一个 AndroidManifest.xml 中包含两个 searchable.xml 活动

    我有一个 Android 应用程序 其中有一些不同的活动用于浏览从 RSS 下载的文章和图像 我希望能够提供连接搜索对话框中的搜索按钮 http developer android com intl zh TW guide topics s
  • 更改 SOLR 默认连接

    我正在使用嵌入 SOLR 的应用程序 SOLR 在 Tomcat 的 webapp 区域中像一场战争一样运行 是否有 SOLR 配置允许我切换搜索的默认 SOLR 行为以假定 AND 而不是 OR 作为连接运算符 在您的模式文件中添加 或修
  • 如何使用 Delphi XE2 IDE 搜索来搜索

    我一直使用搜索来在 庞大的 应用程序源中查找内容 因此搜索有效性对我来说非常重要 目前在 Delphi XE2 IDE 中我喜欢使用 在文件中查找 包括子目录 没有其他花哨的东西 只是一个文本关键字 这工作正常 但我真正想做的是扩展我现在正
  • php/mysql 搜索多个值

    我有一个带有 国家 城市 地区 已发布 字段的表格 我有一个搜索表单 人们可以在其中输入国家 城市或地区 我想要获取所有已发布的房屋 1 并且任何搜索词都与其任何字段相匹配 这是我到目前为止所拥有的 SELECT FROM homes WH
  • 您如何在网络上搜索与编程相关的信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Lua中如何在另一个表的表成员中搜索

    我正在编写一个 lua 程序 它有一个表 该表是另一个表的成员 当我向该成员表添加新日期时 一切正常 但是 当我想在该表中搜索时 无论我给出什么键 我总是会将最后一行添加到表中 如何在该成员表中正确搜索 Stream name functi
  • 如何在从左到右、从上到下排序的二维数组中搜索数字?

    我最近收到了这个面试问题 我很好奇有什么好的解决方案 假设我有一个二维数组 其中所有 数组中的数字在增加 从左到右 从上到下的顺序 底部 搜索和搜索的最佳方式是什么 判断目标号码是否在 大批 现在 我的第一个倾向是使用二分搜索 因为我的数据

随机推荐