1. 题目
序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #
例如:
上面的二叉树可以被序列化为字符串:"9,3,4,#,#,1,#,#,2,#,6,#,#"
,其中#
代表一个空节点
给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法
保证每个以逗号分隔的字符或为一个整数或为一个表示null
指针的#
给出的输入格式一定是有效的,它永远不会包含两个连续的逗号,比如:"1,,3"
要求:不允许重建树
示例1:
输入:preorder = "9,3,4,#,#,1,#,#,2,#,6,#,#"
输出:true
方法1:栈
func isValidSerialization(str : String) -> Bool {
var stack = [String.SubSequence]()
let arr = str.split(separator: ",")
for item in arr {
print("\(item)")
stack.append(item)
while (stack.count >= 3 && stack[stack.count-1] == "#" && stack[stack.count-2] == "#" && stack[stack.count-3] != "#") {
stack.removeLast()
stack.removeLast()
stack.removeLast()
stack.append("#")
}
}
return stack.count == 1 && stack.first == "#"
}
链接:https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/solution/pai-an-jiao-jue-de-liang-chong-jie-fa-zh-66nt/
来源:力扣(LeetCode)