博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Recover Binary Search Tree
阅读量:5961 次
发布时间:2019-06-19

本文共 1276 字,大约阅读时间需要 4 分钟。

LeetCode解题之Recover Binary Search Tree


原题

一棵二叉搜索树中的两个节点交换了位置,找出并调整。

注意点:

  • 最好仅仅用常量的空间

样例:

输入:

3 / \1   2

输出:

2 / \1   3

解题思路

二叉搜索树的中序遍历能够使它的节点排列成一个递增的序列,那就能够把问题简化成在一个递增序列中有两个元素交换了位置。而前面的元素大于后面的元素表示顺序出错,假设整个序列就一处这种问题,那仅仅要交换这两个元素。假设有两处。在仅仅有两个元素顺序有问题的前提下,应该交换第一次错位的前元素(大的元素应该往后放)与第二次错位的后元素(小元素往前放)。

AC源代码

# Definition for a binary tree node.class TreeNode(object):    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass Solution(object):    def __init__(self):        self.node1 = None        self.node2 = None        self.pre = None    def recoverTree(self, root):        """        :type root: TreeNode        :rtype: void Do not return anything, modify root in-place instead.        """        self.__scan(root)        self.node1.val, self.node2.val = self.node2.val, self.node1.val    def __scan(self, root):        if root is None:            return        self.__scan(root.left)        if self.pre is not None:            if root.val < self.pre.val:                if self.node1 is None:                    self.node1 = self.pre                    self.node2 = root                else:                    self.node2 = root        self.pre = root        self.__scan(root.right)if __name__ == "__main__":    None

欢迎查看我的 () 来获得相关源代码。

转载地址:http://csjax.baihongyu.com/

你可能感兴趣的文章
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>
python 学习导图
查看>>
生成树
查看>>