• leetcode 99. 恢复二叉搜索树(dfs,遍历)


    • 题目描述
    给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
    
    进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?
    
     
    
    示例 1:
    输入:root = [1,3,null,null,2]
    输出:[3,1,null,null,2]
    解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。
    示例 2:
    

    输入:root = [3,1,4,null,null,2]
    输出:[2,1,4,null,null,3]
    解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。
    • 解题思路—dfs+递归

    二叉搜索树的中序遍历结果一定是一个从小到大递增的数组,那么我们则可以用中序遍历找到数组中这两个异常值点x,y。

     对这颗二叉树中序遍历,我们用pre节点始终保存二叉树的根节点,然后判断上一个根节点是否大于下一个根节点,如果大于则保存为y节点,然后把上一个根节点保存为x节点。遍历完成后,如果x和y都不是空的话,说明这颗二叉搜索树存在乱序,进行交换即可。

    这道题我觉得可以看下题解:https://leetcode-cn.com/problems/recover-binary-search-tree/solution/san-chong-jie-fa-xiang-xi-tu-jie-99-hui-fu-er-cha-/

    # 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.
            """
            self.x = None 
            self.y = None
            self.pre = None
    
    
            def dfs(root):
                if not root:
                    return
                dfs(root.left)
                if not self.pre:
                    self.pre = root
                else:
                    if self.pre.val > root.val:
                        self.y = root
                        if not self.x:
                            self.x = self.pre 
                    self.pre = root
                dfs(root.right)
            dfs(root)
            if self.x and self.y:
                self.x.val, self.y.val = self.y.val, self.x.val
            return root
    
                        
    

      

  • 相关阅读:
    Android之打包签名
    on a null object reference 问题的解决办法
    Android Fragment使用小结及介绍
    Android开发重点难点:RelativeLayout(相对布局)详解
    Android的学习第六章(布局一LinearLayout)
    与adb相关的问题,比如掉线问题、Android Studio 提示Session 'app':Error Installing APK、找不到设备
    Android LitePal介绍与使用说明
    学习进度条-10
    《梦断代码》阅读笔记03
    用户模板和用户场景
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13924922.html
Copyright © 2020-2023  润新知