一开始想着怎样才能精确找到两个错误的节点,最后发现只要用两个数组分别记录值和节点,然后排序值,再一个一个赋给节点就能保证中序遍历树的正确性了,当然是看了博客啦
class Solution {
public:
vector<int>vec;
vector<TreeNode *>it;
void in_order_traversal(TreeNode *root) {
if (!root)return;
recoverTree(root->left);
vec.push_back(root->val);
it.push_back(root);
recoverTree(root->right);
}
void recoverTree(TreeNode* root) {
in_order_traversal(root);
sort(vec.begin(), vec.end());
for (int i = 0; i < vec.size(); ++i)it[i]->val = vec[i];
}
};