331. Verify Preorder Serialization of a Binary Tree [JavaScript]

一、题目

  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
}

  如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。

  您还可以在这些地方找到我:

  • 一个前端开发者的LeetCode刷题之旅
  • 掘金

你可能感兴趣的:(LeetCode,JavaScript)