zoukankan      html  css  js  c++  java
  • 【LeetCode练习题】Recover Binary Search Tree

    Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake.

    Recover the tree without changing its structure.

    互换二叉搜索树中两个位置错误的节点。

    思路:

    预设三个指针pre,p1,p2。p1用来指向第一个出错的节点,p2用来指向第二个出错的节点。

    出错情况有两种,即p1和p2相邻,p1和p2不相邻。

    中序遍历此二叉树,用pre指向当前节点的上一个节点,如果出错的节点相邻,此时p1应该指向pre,p2应该指向当前节点root。

    若出错节点不相邻,则用p1记录第一个出错节点pre,继续遍历到前一个节点pre大于当前节点root时,用p2指向第二个出错节点p2.

    代码如下:

    class Solution {
    public:
        TreeNode *pre,*p1,*p2;
    
        void run(TreeNode *root){
            if(!root) 
                return;
            run(root->left);
            if(pre && pre->val > root->val){
                if(p1 == NULL){
                    p1 = pre; p2 = root;
                }
                else{
                    p2 = root;
                }
            }
            pre = root;
            run(root->right);
        }
    
        void recoverTree(TreeNode *root) {
            if(!root)
                return ;
            pre = p1 = p2 = NULL;
            run(root);
            swap(p1->val,p2->val);
        }
    };
  • 相关阅读:
    P2P编程(十)
    9.25
    9.22
    pycharm常用快捷命令
    sublime常用快捷方式
    3.1
    总想听你说起不曾喜欢你
    1.1
    python 网络编程和并发编程题
    知识点梳理 网络基础
  • 原文地址:https://www.cnblogs.com/4everlove/p/3685693.html
Copyright © 2011-2022 走看看