One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node’s value. If it is a null node, we record using a sentinel value such as #.
_9_
/ \
3 2
/ \ / \
4 1 # 6
/ \ / \ / \
# # # # # #
For example, the above binary tree can be serialized to the string “9,3,4,#,#,1,#,#,2,#,6,#,#”, where # represents a null node.
Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.
Each comma separated value in the string must be either an integer or a character ‘#’ representing null pointer.
You may assume that the input format is always valid, for example it could never contain two consecutive commas such as “1,3”.
给定二叉树的前序遍历字符串,验证该字符串是否有效,(空节点采用’#'表示)。
这道题参考了社区大神的解法,简单的理解就是:在遍历的过程中,如果系统的入度大于出度,那么“空闲分支”已经用完,后续节点无法挂载在二叉树上,从而判断字符串是否有效。
const isValidSerialization = preorder => {
const a = preorder.split(',')
let diff = 1
for (let item of a) {
diff -= 1
if (diff < 0) {
return false
}
if (item !== '#') {
diff += 2
}
}
return diff === 0
}
如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。
您还可以在这些地方找到我: