[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 };

 

 

 

 

 

posted @ 2016-02-05 14:25  `Liok  阅读(409)  评论(0编辑  收藏  举报