题目
二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
输入: [1,3,null,null,2]
1
/
3
\
2
输出: [3,1,null,null,2]
3
/
1
\
2
示例 2:
输入: [3,1,4,null,null,2]
3
/ \
1 4
/
2
输出: [2,1,4,null,null,3]
2
/ \
1 4
/
3
class Solution {
public:
void recoverTree(TreeNode* root) {
vector<int> result;
inOrder(root,result);
sort(result.begin(),result.end());
recover(root,result);
}
void inOrder(TreeNode* root,vector<int>& vecResult){
if(root == nullptr){
return;
}
inOrder(root->left,vecResult);
vecResult.push_back(root->val);
inOrder(root->right,vecResult);
}
void recover(TreeNode* root,vector<int>& rec){
if(root ==nullptr){
return;
}
recover(root->left,rec);
if(root->val == rec[0]){
rec.erase(rec.begin());
}else{
root->val = rec[0];
rec.erase(rec.begin());
};
recover(root->right,rec);
}
};
作者:ding-tao
链接:https://leetcode-cn.com/problems/recover-binary-search-tree/solution/zhong-xu-bian-li-tong-su-yi-dong-by-ding-tao/
来源:力扣(LeetCode)