Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NoComments
leetcode
提交
38652307
L
leetcode
项目概览
NoComments
/
leetcode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
leetcode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
38652307
编写于
5月 08, 2019
作者:
L
liu13
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
20190508
上级
9e6859a6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
0 deletion
+49
-0
code/lc99.java
code/lc99.java
+49
-0
未找到文件。
code/lc99.java
0 → 100644
浏览文件 @
38652307
package
code
;
import
java.util.Stack
;
/*
* 99. Recover Binary Search Tree
* 题意:二叉搜索树中两个节点错位了,恢复二叉搜索树,用O(1)空间
* 难度:Hard
* 分类:Tree, Depth-first Search
* 思路:只要记录错乱的节点就可以了,最后交换两个节点的值
* 先序遍历 在print那个地方加上逻辑代码
* Tips:
*/
public
class
lc99
{
public
class
TreeNode
{
int
val
;
TreeNode
left
;
TreeNode
right
;
TreeNode
(
int
x
)
{
val
=
x
;
}
}
TreeNode
tn1
=
null
;
TreeNode
tn2
=
null
;
public
void
recoverTree
(
TreeNode
root
)
{
inorder
(
root
);
int
temp
=
tn1
.
val
;
tn1
.
val
=
tn2
.
val
;
tn2
.
val
=
temp
;
}
public
void
inorder
(
TreeNode
root
){
TreeNode
pre
=
null
;
Stack
<
TreeNode
>
st
=
new
Stack
();
while
(
root
!=
null
||
!
st
.
isEmpty
()){
while
(
root
!=
null
){
st
.
add
(
root
);
root
=
root
.
left
;
}
root
=
st
.
pop
();
if
(
pre
!=
null
&&
pre
.
val
>
root
.
val
&&
tn1
==
null
)
tn1
=
pre
;
if
(
pre
!=
null
&&
pre
.
val
>
root
.
val
&&
tn1
!=
null
)
//可能被执行多次 eg 3 2 1 tn2 先被赋值2 后被赋值1
tn2
=
root
;
pre
=
root
;
root
=
root
.
right
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录