zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]Verify Preorder Serialization of a Binary Tree

    Verify Preorder Serialization of a Binary Tree

    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".

    Example 1:
    "9,3,4,#,#,1,#,#,2,#,6,#,#"
    Return true

    Example 2:
    "1,#"
    Return false

    Example 3:
    "9,#,#,1"
    Return false

    https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/


    要判断给的序列是不是树的先序遍历序列。

    思路就是"挖洞",如果第一个是数,那就是根节点,它的左右可以放2个节点,有两个"洞"。

    此时如果是'#',填上了一个洞;如果是数,填上一个洞又加了两个洞。

    当洞不够用或者最后有没填满的洞,就说明不是先序遍历序列。

     1 /**
     2  * @param {string} preorder
     3  * @return {boolean}
     4  */
     5 var isValidSerialization = function(preorder) {
     6     var spilted = preorder.split(','), holes = 0;
     7     if(spilted.length === 0) return true;
     8     if(spilted[0] !== '#') holes += 2;
     9     for(var i = 1; i < spilted.length; i++){
    10         if(spilted[i] !== '#'){
    11             if(holes > 0) holes++;
    12             else return false;
    13         }else{
    14             holes--;
    15         }
    16         if(holes < 0) return false;
    17     }
    18     return holes === 0 ? true : false;
    19 };
  • 相关阅读:
    extjs 表单显示控制
    windows net user
    ORACLE截取时间
    oracle to_timestamp
    oracle to_date
    ext numberfield小数模式
    ext 仅文字field
    extjs 占位字段
    [转]CPU的位数与操作系统的位数的区别
    32位的Win7系统下安装64位的Sql Sever?
  • 原文地址:https://www.cnblogs.com/Liok3187/p/5183116.html
Copyright © 2011-2022 走看看