首页 > 其他 > 详细

leetcode [331]Verify Preorder Serialization of a Binary Tree

时间:2019-05-22 12:52:01      阅读:99      评论:0      收藏:0      [点我收藏+]

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

leetcode [331]Verify Preorder Serialization of a Binary Tree

原文:https://www.cnblogs.com/xiaobaituyun/p/10905248.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!