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);
        }
    };
  • 相关阅读:
    抽象类、接口
    静态联编、动态联编
    多态
    QML、Qt Quick
    重载、多态、继承、封装
    异步消息postEvent更新界面
    联合体union
    使用 Git@OSC 管理代码
    excel数据生成sql insert语句
    excel数据生成sql insert语句
  • 原文地址:https://www.cnblogs.com/4everlove/p/3685693.html
Copyright © 2011-2022 走看看