99. 恢复二叉搜索树

99. 恢复二叉搜索树

原始题目链接:https://leetcode-cn.com/problems/recover-binary-search-tree/
给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。

进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?

在这里插入图片描述
在这里插入图片描述
解题思路:

1、先中序遍历,得到包含被错误交换的节点列表。
2、将中序遍历得到的列表进行排序。
3、查找两个列表不一样的值,交换即可。

代码实现:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def recoverTree(self, root: TreeNode) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        # 中序遍历二叉搜索树,应该得到一个有序的序列
        # 使用匿名函数lambda,可以简化代码
        # 返回的是中序遍历后的节点列表
        tree = lambda x : [] if not x else tree(x.left) + [x] + tree(x.right)

        # 调用上面的匿名函数
        unsorted_nodes_list = tree(root)

        # 再对上面的节点列表进行排序,按照节点的val值排序
        sorted_nodes_list = sorted(unsorted_nodes_list, key = lambda x: x.val)

        # 查找没排序的节点列表的和排序节点列表的不一样的节点值
        # 找到后,交换即可
        node_a, node_b = [unsorted_nodes_list[i] for i in range(len(unsorted_nodes_list)) if unsorted_nodes_list[i] != sorted_nodes_list[i]]
        node_a.val, node_b.val = node_b.val, node_a.val

参考文献:
https://leetcode-cn.com/problems/recover-binary-search-tree/solution/python3-zhong-xu-bian-li-wu-xing-dai-ma-by-ting-ti/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值