给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/recover-binary-search-tree

例:

输入:root = [1,3,null,null,2]
输出:[3,1,null,null,2]
解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

解析:

因为只有两个节点出了问题,先对搜索树进行中序遍历,如果只有一组逆序对,那么只需要调换两个位置就行了,如果有两组逆序对,因为右边的数大于左边的数,所以位置不对的一定是第一组的第一个较大的数和第二组第二个较小的数,进行调换即可。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution(object):def __init__(self):self.res = []def recoverTree(self, root):""":type root: TreeNode:rtype: None Do not return anything, modify root in-place instead."""self.mid(root)node1 = None  # 第一个错误节点node2 = None  # 第二个错误节点for i in range(len(self.res)-1):if self.res[i].val > self.res[i+1].val and node1 == None:  # 只有一组逆序对node1 = self.res[i]node2 = self.res[i+1]elif self.res[i].val > self.res[i+1].val and node1 !=None:  # 有两组逆序对node2 = self.res[i+1] node1.val, node2.val = node2.val, node1.val  # 将两个数进行对调def mid(self, root):  # 中序遍历if root is not None:self.mid(root.left)self.res.append(root)self.mid(root.right)

恢复二叉搜索树Python解法相关推荐

  1. 有序链表转换二叉搜索树Python解法

    给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1. 来源:力扣(Lee ...

  2. 将有序数组转换为二叉搜索树Python解法

    给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树. 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树. 来源: ...

  3. 验证二叉搜索树Python解法

    给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树和右子 ...

  4. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  5. 刻意练习:LeetCode实战 -- Task24. 恢复二叉搜索树

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  6. 99. Recover Binary Search Tree 恢复二叉搜索树

    二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2] 1/3\2 输出: [3,1,null,null,2] 3/1\2 ...

  7. 72. Leetcode 99. 恢复二叉搜索树 (二叉搜索树-中序遍历类)

    给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换.请在不改变其结构的情况下,恢复这棵树 .示例 1:输入:root = [1,3,null,null,2] 输出:[3,1, ...

  8. 【数据结构与算法】之深入解析“恢复二叉搜索树”的求解思路与算法示例

    一.题目要求 给你二叉搜索树的根节点 root ,该树中的恰好两个节点的值被错误地交换.请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入:root = [1,3,null,null,2] 输出 ...

  9. 深度优先搜索DFS | Morris遍历:力扣99. 恢复二叉搜索树

    1.题目描述: 2.题解: 方法1:中序遍历迭代 二叉搜索树的性质: 1.若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 2.若任意节点的右子树不空,则右子树上所有节点的值均大于 ...

最新文章

  1. R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
  2. VMTK学习——01.入门
  3. Go 语言编程 — net 库
  4. tensorrt优化笔记
  5. 超纯超美的曲线(Peter De Jong Attractor)
  6. android动态添加标签,android – 动态添加Textview
  7. android 定义固定数组,Android 图片数组定义和读取
  8. c#设置开机自动启动程序本篇文章来源于:
  9. Android 系统(66)---Android硬件加速相关问题总结
  10. canal 入门(1)
  11. Handbook之012:函数类别构型
  12. 2018-10-11
  13. 自定义view imageviw
  14. Eclipse 更新Android SDK后,新建项目出现appcompat_v7project的相关问题
  15. win10安装pyhive包
  16. Linux源码安装Mysql5.7
  17. 计算机基础作业3考试客户端答案,2015年12月份考试作业计算机基础第3次作业满分答案...
  18. java 日语文档翻译_日语文档怎么翻译?我来教会你日语翻译
  19. 再战港交所的高视医疗,近视小伙伴的福音?
  20. 近期BSN开发常见问题答疑

热门文章

  1. SAP Commerce Cloud Spartacus UI footer 区域的设计模型
  2. Angular Component代码和编译后生成的JavaScript代码
  3. Angular 页面元素的DOM级别的删除过程
  4. why CRMFSH01 failed to return any value for my case
  5. jQuery.sap.registerModulePath(cus.crm.notes.ext, '/ZCRM_NOTES_W8');
  6. SAP UI5 mock mode more discussion
  7. Value 'EN' violates facet information 'maxlength=1'
  8. Why Opportunity list is empty
  9. SAP Cloud for Customer的Container应用设计原理
  10. SAP CRM Business Partner 自动决定Determination的执行逻辑