leetcode-Recover Binary Search Tree

来源:互联网 发布:时序数据挖掘 编辑:程序博客网 时间:2024/06/03 19:24

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

Recover the tree without changing its structure.

Note:

A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    void FindTwo(TreeNode *node, int &temp1, int &temp2, TreeNode* &prenode, TreeNode* &node1, TreeNode* &node2)    {        if(node == NULL)return;        FindTwo(node->left, temp1, temp2, prenode, node1, node2);        if(prenode == NULL)        {            temp1 = node->val;            temp2 = node->val;        }        else        {            temp1 = temp2;            temp2 = node->val;            if(temp1 > temp2)            {                if(node1 == NULL)node1 = prenode;                node2 = node;            }        }        prenode = node;                FindTwo(node->right, temp1, temp2, prenode, node1, node2);    }        void recoverTree(TreeNode *root) {        if(root == NULL) return;        int temp1;        int temp2;        TreeNode *preNode = NULL;        TreeNode *node1 = NULL;        TreeNode *node2 = NULL;        FindTwo(root, temp1, temp2, preNode, node1, node2);        int temp = node1->val;        node1->val = node2->val;        node2->val = temp;        return;    }};


0 0
原创粉丝点击