Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
awesome-algorithm
提交
dc556871
A
awesome-algorithm
项目概览
OpenDocCN
/
awesome-algorithm
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
awesome-algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
dc556871
编写于
12月 29, 2017
作者:
K
KEQI HUANG
提交者:
GitHub
12月 29, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
上级
1df70d64
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
3 deletion
+19
-3
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
+19
-3
未找到文件。
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
浏览文件 @
dc556871
...
...
@@ -14,14 +14,30 @@ Medium
二叉搜索树先序遍历序列的特点是降序的部分一定是向左走的,一旦开始升序说明开始向右走了,
则上一个降序的点则限定了后面的数的最小值。如果继续降序,说明又向左走了,这样等到下次向右走得时候也要再次更新最小值。
>
10
```
10
/ \
5 12
/ \
2 6
```
如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。
```
python
class
Solution
(
object
):
def
verifyPreorder
(
self
,
preorder
):
"""
:type preorder: List[int]
:rtype: bool
"""
stack
=
[]
lower
=
-
1
<<
31
for
x
in
preorder
:
if
x
<
lower
:
return
False
while
stack
and
x
>
stack
[
-
1
]:
lower
=
stack
.
pop
()
stack
.
append
(
x
)
return
True
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录