331. Verify Preorder Serialization of a Binary Tree
My SubmissionsOne 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
150 / 150 test cases passed.
|
Status:
Accepted |
Runtime: 8 ms
|
1 class Solution { 2 public: 3 bool isValidSerialization(string preorder) { 4 int l = preorder.length(); 5 if(preorder[0] == '#'){ 6 if(l == 1) return true; 7 else return false; 8 } 9 int i = 0; 10 stack<int> s; 11 s.push(0); 12 while(i<l && preorder[i] != ',') i++; 13 i++; 14 int te; 15 while(i < l) 16 { 17 if(preorder[i] == '#'){ 18 if(s.empty() == 1) return false; 19 while(!s.empty()) 20 { 21 te = s.top(); 22 if(te == 2) return false; 23 s.pop(); 24 s.push(te + 1); 25 te = s.top(); 26 if(te == 1){ 27 break; 28 } 29 if(te == 2 ){ 30 s.pop(); 31 } 32 } 33 if(s.empty() == 1 && i < l - 1) return false; 34 } 35 else{ 36 s.push(0); 37 } 38 while(i < l && preorder[i] != ',') i++; 39 i++; 40 } 41 if(s.size() == 0) return true; 42 return false; 43 } 44 };