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
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值