題目描述
二叉搜索樹中的兩個節點被錯誤地交換。
請在不改變其結構的情況下,恢復這棵樹。
進階:
- 使用 O(n) 空間複雜度的解法很容易實現。
- 你能想出一個只使用常數空間的解決方案嗎?
白話題目:
算法:
詳細解釋關注 B站 【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB
C語言完全代碼
int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNode *root)
{
if (root == NULL) return 0;
if (midOrder(pre, err1, err2, root->left) == -1) return -1;
if (*pre != NULL && (*pre)->val > root->val) {
if (*err1 == NULL) {
*err1 = *pre;
*err2 = root;
} else {
*err2 = root;
return -1;
}
}
*pre = root;
if (midOrder(pre, err1, err2, root->right) == -1) return -1;
return 0;
}
void recoverTree(struct TreeNode* root){
struct TreeNode *pre = NULL;
struct TreeNode * err1 = NULL;
struct TreeNode * err2 = NULL;
midOrder(&pre, &err1, &err2, root);
int tmp;
tmp = err1->val;
err1->val = err2->val;
err2->val = tmp;
return;
}