leetcode做题笔记99. 恢复二叉搜索树

给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树

思路一:模拟题意

cpp 复制代码
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;
}

分析:

本题要将错误交换的两个数交换回来,即可能有两种情况,一是两个值所在的节点相邻,只有一对错误值,将错误值的两个数交换位置即可,二是两个值所在的节点不相邻,即有两对错误值,将第一对错误值前面的数和第二对错误值后面的数交换位置即可解决。

总结:

本题考察二叉树交换值的应用,分类讨论错误的情况再加以解决即可做出

相关推荐
小码农<^_^>38 分钟前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~40 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
Yawesh_best1 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
软工菜鸡1 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
AI视觉网奇2 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn
JingHongB2 小时前
代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础
算法·深度优先·图论
weixin_432702262 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
小冉在学习2 小时前
day52 图论章节刷题Part04(110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长 )
算法·深度优先·图论
Repeat7152 小时前
图论基础--孤岛系列
算法·深度优先·广度优先·图论基础