美文网首页
Leetcode99 恢复二叉搜索树

Leetcode99 恢复二叉搜索树

作者: VIELAMI | 来源:发表于2020-10-18 11:25 被阅读0次

题目地址:
https://leetcode-cn.com/problems/recover-binary-search-tree/

【思路】
在一次遍历的过程中,找到两个异常的节点,把这两个节点的值交换。
怎么找呢?
二叉搜索树的中序遍历是一个升序数组
可记录每一次遍历的前置节点
遍历到的节点的value一定要比前置节点的大
如果比前置节点要小 则记录为异常

上代码

class Solution {
public:
    TreeNode* x = nullptr;
    TreeNode* y = nullptr;
    TreeNode* preValue = nullptr;
    void inOrder(TreeNode* node){
        if(node == nullptr) return;
        inOrder(node -> left);
        if(preValue != nullptr){
            if(node -> val < preValue -> val){
                y = node;
                if(x == nullptr) x = preValue;
                else return;
//记录节点的小技巧
            }
        }
        preValue = node;
        inOrder(node ->right);
    }
    void recoverTree(TreeNode* root) {
        inOrder(root);
        int tmp = x->val;
        x->val = y->val;
        y->val = tmp;
    }

};

【记录节点的小技巧】
有两种交换情况:
相邻的两个节点交换了,不相邻的两个节点交换了


image.png

相邻交换记录异常的两个就行了
不相邻交换时,异常的preValue才是出问题的那个
(自己想一想)

相关文章

  • Leetcode99 恢复二叉搜索树

    题目地址:https://leetcode-cn.com/problems/recover-binary-sear...

  • 数据结构与算法之二叉搜索树(八)

    目录 二叉搜索树概念二叉搜索树的接口设计,包括增,删,改,查平衡二叉搜索树 一 二叉搜索树 二叉搜索树是二叉树的一...

  • LeetCode-099-恢复二叉搜索树

    恢复二叉搜索树 题目描述:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况...

  • 递归-深度优先遍历-99. 恢复二叉搜索树

    Leetcode 恢复二叉搜索树 分析:首先题目寿命恰好存在两个错误节点;因为二叉搜索树的中序遍历一定是有序的,那...

  • Algorithm小白入门 -- 二叉搜索树

    二叉搜索树二叉搜索树 BSTBST 的基本操作计算合法的 BST 1. 二叉搜索树 BST 二叉搜索树(Binar...

  • 99. 恢复二叉搜索树

    二叉搜索树中的两个节点被错误地交换。 请在不改变其结构的情况下,恢复这棵树。 思路: 首先,要知道二叉搜索树的中序...

  • 二叉搜索树

    二叉搜索树 图解二叉树搜索算法图解:二叉搜索树算法二叉查找树(Binary Search Tree),(又:二叉搜...

  • 99. 恢复二叉搜索树

    99. 恢复二叉搜索树[https://leetcode.cn/problems/recover-binary-s...

  • 23-红黑树

    1.二叉搜索树(BST)继承二叉树(BinaryTree) 2.平衡二叉搜索树(BBST)继承二叉搜索树(BST)...

  • 二叉搜索树(Binary Search Tree)

    1. 定义 二叉搜索树(BST)又叫二叉查找树,二叉排序树。二叉搜索树就是一棵二叉树,但是它又具有搜索树的特征: ...

网友评论

      本文标题:Leetcode99 恢复二叉搜索树

      本文链接:https://www.haomeiwen.com/subject/vrzqmktx.html