99. Recover Binary Search Tree

一开始想着怎样才能精确找到两个错误的节点,最后发现只要用两个数组分别记录值和节点,然后排序值,再一个一个赋给节点就能保证中序遍历树的正确性了,当然是看了博客啦

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];
	}
};

你可能感兴趣的:(LeetCode,AC代码)