题目描述
序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如#
。
_9_
/ \
3 2
/ \ / \
4 1 # 6
/ \ / \ / \
# # # # # #
样例
输入: "9,3,4,#,#,1,#,#,2,#,6,#,#"
输出: true
算法
dfs模拟建树
Java 代码
class Solution {
String s;
int k;
boolean dfs() {
if (k == s.length()) return false; // 该位置不合法,盘否并阻断继续递归
// 以null正常结束
if (s.charAt(k) == '#') {
k += 2;
return true;
}
// 找到下一个元素
while (s.charAt(k) != ',') k ++ ;
k += 1;
// 分别判定左右子树
return dfs() && dfs();
}
public boolean isValidSerialization(String _s) {
s = _s;
s += ','; // 在末尾添加一个,作为结束符
k = 0;
if (!dfs()) return false;
return k == s.length();
}
}