利用迭代式中序遍历,找到两个错误的节点。 以中序遍历序列【1,2,6,4,5,3】为例,其两个错误的节点是6和3, 那么只有当遍历到4时,才能发现6是错误的节点,因此用x存储4的上一个节点,也就是6; 当遍历到第二个错误节点的时候,可以直接发现3小于5,用y存储当前节点就好。
vector<int> findError(TreeNode* root) {
// write code here
stack<TreeNode*> stk;
TreeNode* x = nullptr;
TreeNode* y = nullptr;
TreeNode* pred = nullptr;
while (!stk.empty() || root != nullptr) {
while (root != nullptr) {
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
if (pred != nullptr && root->val < pred->val) {
y = root;
if (x == nullptr) {
x = pred;
}
else break;
}
pred = root;
root = root->right;
}
return {y->val, x->val};
}
作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/recover-binary-search-tree/solution/hui-fu-er-cha-sou-suo-shu-by-leetcode-solution/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。