学渣带你刷Leetcode0099恢复二叉搜索树

题目描述

二叉搜索树中的两个节点被错误地交换。

请在不改变其结构的情况下,恢复这棵树。

进阶:

  • 使用 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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章