golang中怎么利用leetcode 恢复二叉搜索树
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,golang中怎么利用leetcode 恢复二叉搜索树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。二叉搜索树中的两个节
千家信息网最后更新 2025年12月02日golang中怎么利用leetcode 恢复二叉搜索树
golang中怎么利用leetcode 恢复二叉搜索树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
示例 1:
输入: [1,3,null,null,2]
1
/
3
\
2
输出: [3,1,null,null,2]
3
/
1
\
2
示例 2:
输入: [3,1,4,null,null,2]
3
/ \
1 4
/
2
输出: [2,1,4,null,null,3]
2
/ \
1 4
/
3进阶:
使用 O(n) 空间复杂度的解法很容易实现。
你能想出一个只使用常数空间的解决方案吗?
解题思路:
1,二叉树的性质:左子树<根<小于右子树
2,如果中序遍历二叉树就能得到一个递增的序列
3,由于只交换了两个位置,假设这两个位置为first,second,则first左边小于first,右边大于first,second的左边都小于second,只需交换first,second位置即可
4,如何得到递增序列?
中序遍历
5,用pre记录中序遍历的上一个位置,如果pre.val>cur.val说明pre的位置放错了,用first,second 记录两个位置,最好交换即可
6,注意,由于使用了全局指针,所以,使用前一定要初始化,否则结果很奇怪
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/var pre,first,second *TreeNodefunc recoverTree(root *TreeNode) {pre=nilfirst=nilsecond =nilmidOrder(root)temp:=first.Valfirst.Val=second.Valsecond.Val=tempreturn}func midOrder(cur *TreeNode){if cur==nil{return}midOrder(cur.Left)if pre!=nil && pre.Val>cur.Val{if first==nil{first=presecond=cur}else{second=cur}}pre=curmidOrder(cur.Right)}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
位置
两个
搜索
序列
示例
空间
子树
帮助
输入
输出
复杂
清楚
全局
内容
只需
右边
复杂度
对此
常数
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发 即征即退
软件开发即增即退
网络服务器为什么会被黑客袭击
学计算机软件开发英语不好
平板打印服务器
软件开发源代码有什么用
编译linux服务器
have与数据库的区别
网络安全审查工作开展情况
mc金色时光服务器
epic需要建立完整服务器
dhcp服务器分配ip地址
数据库多个项目如何选择
安徽视频点播软件开发外包公司
数据库限定为空写法
网络安全实训答辩
珠海直播教学软件开发
typeint 数据库
创建存储过程备份数据库
验证码软件开发
以太坊软件开发
科技跟互联网有关的用户名
贵阳市租房网络安全
南京个人存储服务器
属于威胁网络安全行为
sap各数据库表的全称
长安软件开发中心
华为自动驾驶网络技术峰会
利通区科技型网站服务器
vb数据库库存预警