Leetcode 99. 恢复二叉搜索树(DAY 22 Hard含题解)
发布日期:2021-06-30 22:24:27
浏览次数:2
分类:技术文章
本文共 1604 字,大约阅读时间需要 5 分钟。
原题题目
思路分析
首先对于中序数组 比如【1、2、3、4、5、6】 交换两个数 有两种情况 相邻的和不相邻的 对于 相邻的两个数比如交换 2、3 则得到【1、3、2、4、5、6】 对于我们有序序列判断就是 前一个节点的值比当前节点的值小 对于第一个数 前一个节点设置为NULL判断即可 则会出现一个逆序情况 3->2 对于此时我们只需要交换这两个节点的值 2、3即可
对于不相邻的两个数 比如交换 2、6 则得到【1、6、3、4、5、2】 则会出现 6->3 5->2两个逆序情况 此时需要交换 第一个逆序的前面的 和 第二个逆序的后面的节点值即可
代码实现(首刷自解)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */#define MAX 1001void recoverTree(struct TreeNode* root){ if(!root) return; int size = 0,top = 0,wrongtimes = 0;//记录顺序颠倒次数 //change1 change2主要记录两个需要交换值的两个节点 struct TreeNode* stack[MAX],*change1,*change2,*preroot = NULL; //这里就是中序遍历迭代法 while(size > 0 || root) { while(root) { stack[size++] = root; root = root->left; } root = stack[--size]; //这里就是中序遍历改动的地方 if(preroot && root->val < preroot->val) { //此时出现了一次 则先记录相邻两节点 if(!wrongtimes) { change1 = preroot; change2 = root; wrongtimes++; } //再进入时则说明出现了两次了 直接交换退出即可 //这里的root就是第二个逆序后面的节点 else { int temp = root->val; root->val = change1->val; change1->val = temp; return; } } preroot = root; root = root->right; } //这里就是当已经退出中序遍历时 第二个逆序还没有出现 //则此时逆序情况为 相邻 交换相邻节点值即可退出 int temp = change1->val; change1->val = change2->val; change2->val = temp; return;}
通过结果
转载地址:https://love6.blog.csdn.net/article/details/112428143 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月28日 14时37分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WEB前端语音对讲实现方案以及示例
2019-05-01
Eureka和Consul的区别
2019-05-01
Kafka如何做到高可用及保证写入数据不丢失
2019-05-01
并发编程及工具类
2019-05-01
Elasticsearch
2019-05-01
redis
2019-05-01
分库分表及读写分离
2019-05-01
Dubbo
2019-05-01
Hystrix
2019-05-01
HIDL服务死亡通知实例 hidl_death_recipient
2019-05-01
QNX相关资料整理
2019-05-01
如何使用am命令启动Android应用
2019-05-01
指针大小
2019-05-01
Nacos Discovery Starter Configurations
2019-05-01
ConfigurationProperties实现
2019-05-01
loadbalancer动态刷新nacos的server
2019-05-01
@FeignClient注解的重复名称解决
2019-05-01
org.openjdk.jol
2019-05-01
自己解析class文件
2019-05-01
access_flags
2019-05-01