golang中怎么利用leetcode 恢复二叉搜索树
发表于:2024-10-31 作者:千家信息网编辑
千家信息网最后更新 2024年10月31日,golang中怎么利用leetcode 恢复二叉搜索树,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。二叉搜索树中的两个节
千家信息网最后更新 2024年10月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安全错误
数据库的锁怎样保障安全
优化网络安全治理
目前服务器支持哪些语言
益阳软件开发培训收费
网络安全法 网络标准
拉萨警示教育体验中心软件开发
邢台深朗软件开发有限公司
网络安全编导
南沙物联网软件开发解决方案
新时达服务器电路图
小程序可以链接到数据库吗
软件开发知识产权条款
大专计算机网络技术工程师
建站数据库怎么导入
数据库数组必须先定义后赋值
数据库涨价现状
mysql数据库冷热备份
app软件开发的基本
网络安全工程师代表人物
服务器可以查询账号密码吗
网络安全为人民安全手抄报写的字
万里数据库致远互联
软件开发怎么提升业绩
网络技术在线咨询管理平台
打印目录软件如何连接数据库
java软件开发文件夹目录
优房网络技术有限公司怎么样
数据分类网络安全法
服务器ip与管理ip的区别
映翰通网络技术股东
数据库技术教程视频