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
题目大意:
判断字符串是否是有效的序列化字符串。
解法:
这道题目又没有做出来,参考了一下网上的解法,每个树的节点都有入度和出度。
定义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