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:"9,3,4,#,#,1,#,#,2,#,6,#,#"
Return true
Example 2:"1,#"
Return false
Example 3:"9,#,#,1"
Return false
1 public class Solution { 2 public bool IsValidSerialization(string preorder) { 3 if (preorder.Length < 1) return true; 4 5 var nodes = preorder.Split(',').ToList(); 6 7 return Deserialize(nodes) && nodes.Count == 0; 8 } 9 10 private bool Deserialize(IList<string> nodes) 11 { 12 if (nodes.Count == 0) return true; 13 14 var n = nodes[0]; 15 nodes.RemoveAt(0); 16 17 if (n == "#") return true; 18 if (nodes.Count < 2) return false; 19 20 return (Deserialize(nodes) && Deserialize(nodes)); 21 } 22 }

浙公网安备 33010602011771号