【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);

    }

};

 

你可能感兴趣的:(Binary search)