LeetCode---Recover Binary Search Tree

来源:互联网 发布:js foreach遍历数组 编辑:程序博客网 时间:2024/05/20 08:44

题目大意:给出一个交换了两个节点值的二叉搜索树,将其还原成正常的二叉搜索树。

算法思想:

可知,二叉搜索树进行中序遍历的结果为单调递增序列。

中序遍历二叉搜索树,将其遍历序列记录下来,对结果序列进行排序形成单调递增序列,然后再次经行中序遍历,遍历过程中将遍历的节点值和上述结果比较若不同则该节点值是被交换的,则将其修改为正常的值,知道遍历结束。

代码如下:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    void recoverTree(TreeNode* root) {        if(root==NULL||(root->left==NULL&&root->right==NULL))        return ;        vector<int> values;        TreeNode* p=root;        stack<TreeNode*> S;        while(p!=NULL||!S.empty()){           while(p!=NULL){              S.push(p);              p=p->left;           }           if(!S.empty()){              p=S.top();              S.pop();              values.push_back(p->val);              p=p->right;           }        }                sort(values.begin(),values.end());        p=root;        int i=0;                while(p!=NULL||!S.empty()){           while(p!=NULL){              S.push(p);              p=p->left;           }           if(!S.empty()){              p=S.top();              S.pop();              if(values[i]!=p->val)              {                  p->val=values[i];              }              ++i;              p=p->right;           }        }    }};


0 0
原创粉丝点击