原题链接


思路(参考负雪明图):
如果一个节点是叶子节点,它的两个孩子必定是空,对于题目而言就是:

否则,一个非叶子节点存在两种可能:
如图:

核心思路如下:
4,#,# 变成#6,#,#] => [9,#,2,#,#] => [9,#,#] => [#]。我们用栈来遍历这个前序遍历的结果,用自底向上的特性去操作:
4,#,# 变成#的一个体现。#号, 说明二叉树的前序遍历是有效的。public boolean isValidSerialization(String preorder) {
LinkedList<String> stack = new LinkedList<>();
for (String str : preorder.split(",")) {
stack.push(str);
// 如果栈顶的前两个元素都是#号,并且第三个元素非 # 号,那么弹出前三个元素,并入一个#号
while (stack.size() >= 3
&& "#".equals(stack.get(0))
&& "#".equals(stack.get(1))
&& !"#".equals(stack.get(2))) {
stack.pop();
stack.pop();
stack.pop();
stack.push("#");
}
}
return stack.size() == 1 && "#".equals(stack.get(0));
}