leetcode [331]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:

Input: "9,3,4,#,#,1,#,#,2,#,6,#,#"
Output: true

Example 2:

Input: "1,#"
Output: false

Example 3:

Input: "9,#,#,1"
Output: false

题目大意:

判断字符串是否是有效的序列化字符串。

解法:

这道题目又没有做出来,参考了一下网上的解法,每个树的节点都有入度和出度。

  • 非根节点且非空的话,那么该节点的入度为1,出度为2。
  • 如果是空节点的话,那么节点的入度为1,出度为0。

定义diff = outdegree - indegree,最后diff=0的话,说明这是一个有效的序列,如果在任何一个节点,出现diff<0的情况,说明该序列并不是一个有效序列。

java:

class Solution {
    public boolean isValidSerialization(String preorder) {
        String[] strs=preorder.split(",");
        int diff=1;
        for (int i=0;i<strs.length;i++){
            if (--diff<0) return false;
            if (!"#".equals(strs[i])) diff+=2;
        }
        return diff==0;
    }
}
posted @ 2019-05-22 12:40  小白兔云  阅读(141)  评论(0编辑  收藏  举报