golang中怎么利用leetcode 恢复二叉搜索树
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,golang中怎么利用leetcode 恢复二叉搜索树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。二叉搜索树中的两个节
千家信息网最后更新 2025年01月31日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 *TreeNode
func recoverTree(root *TreeNode) {
pre=nil
first=nil
second =nil
midOrder(root)
temp:=first.Val
first.Val=second.Val
second.Val=temp
return
}
func midOrder(cur *TreeNode){
if cur==nil{
return
}
midOrder(cur.Left)
if pre!=nil && pre.Val>cur.Val{
if first==nil{
first=pre
second=cur
}else{
second=cur
}
}
pre=cur
midOrder(cur.Right)
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
位置
两个
搜索
序列
示例
空间
子树
帮助
输入
输出
复杂
清楚
全局
内容
只需
右边
复杂度
对此
常数
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全专题优势
抖音直播网络技术
佛山服务器机柜多少钱
正规网络技术一体化
广州鸿知互联网科技有限公司
汽车企业软件开发岗位
杨格门锁怎么连数据库
数据库心跳
大同市软件开发需求
舟山网络安全和信息化委员会
什么棋牌软件开发比较好
数据库课程设计摘要
惠益商盟软件开发
上海可视化智慧社区软件开发
it 软件开发哪家专业
当前网络安全的特点
服务器应该有什么好玩的指令
中国各省市碳排放数据库
qq用什么数据库
软件开发怎么进行管理
广东好房网络技术有限公司
江苏宿迁软件开发学校
与网络安全有关的爆照片
行为安全观察软件开发
cms数据库怎么建站
购买数据库系统的账务处理
网络安全与执法是啥专业
快乐领域服务器
国研网数据库包括那些
网络安全宣传视频情景剧