“9,3,4,#,#,1,#,#,2,#,6,#,#”,其中
#
代表一个空节点。
给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。
保证 每个以逗号分隔的字符或为一个整数或为一个表示
n
u
l
l
null
null 指针的
′
′
‘#’
′#′ 。
你可以认为输入格式总是有效的
例如它永远不会包含两个连续的逗号,比如
"
1
,
,
3
"
“1,3”
“1,3” 。
注意:不允许重建树。
示例 1:
输入:p
r
e
o
r
d
e
r
=
"
9
,
3
,
4
,
,
,
1
,
,
,
2
,
,
6
,
,
"
preorder = “9,3,4,#,#,1,#,#,2,#,6,#,#”
preorder=“9,3,4,#,#,1,#,#,2,#,6,#,#”
输出:t
r
u
e
true
true
示例 2:
输入:p
r
e
o
r
d
e
r
=
"
1
,
"
preorder = “1,#”
preorder=“1,#”
输出:f
a
l
s
e
false
false
示例 3:
输入:p
r
e
o
r
d
e
r
=
"
9
,
,
,
1
"
preorder = “9,#,#,1”
preorder=“9,#,#,1”
输出:f
a
l
s
e
false
false
提示:
- 1
≤
p
r
e
o
r
d
e
r
.
l
e
n
g
t
h
≤
1
0
4
1 \leq preorder.length \leq 10^4
1≤preorder.length≤104
- p
r
e
o
r
d
e
r
preorder
preorder 由以逗号
"
,
"
“,”
“,” 分隔的
[
0
,
100
]
[0,100]
[0,100] 范围内的整数和
“
”
“#”
“#” 组成
思路
这道题要求验证给定的序列是否是正确的二叉树的前序序列化,而且不能重建树。可以使用迭代的方法来模拟整个过程。
可以观察到一个有效的二叉树序列化中,非空节点后面必然跟着两个
′
′
‘#’
′#′表示空节点,因为二叉树中的每个节点都有两个子节点(包括空节点)。所以可以遍历序列,当遇到一个非空节点时,记录之后的两个节点是否为
′
′
‘#’
′#′,如果是则继续遍历,否则返回
f
a
l
HTTP
-
HTTP 报文结构是怎样的?
-
HTTP有哪些请求方法?
-
GET 和 POST 有什么区别?
-
如何理解 URI?
-
如何理解 HTTP 状态码?
-
简要概括一下 HTTP 的特点?HTTP 有哪些缺点?
-
对 Accept 系列字段了解多少?
-
对于定长和不定长的数据,HTTP 是怎么传输的?
-
HTTP 如何处理大文件的传输?
-
HTTP 中如何处理表单数据的提交?
-
HTTP1.1 如何解决 HTTP 的队头阻塞问题?
-
对 Cookie 了解多少?
-
如何理解 HTTP 代理?
-
如何理解 HTTP 缓存及缓存代理?
-
为什么产生代理缓存?
-
源服务器的缓存控制
-
客户端的缓存控制
-
什么是跨域?浏览器如何拦截响应?如何解决?