Leetcode 331. Verify Preorder Serialization of a Binary Tree (Medium) (cpp)

来源:互联网 发布:做标准件网络销售需要 编辑:程序博客网 时间:2024/06/06 19:39

Leetcode 331. Verify Preorder Serialization of a Binary Tree (Medium) (cpp)

Tag: Stack

Difficulty: Medium


/*331. Verify Preorder Serialization of a Binary Tree (Medium)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 trueExample 2:"1,#"Return falseExample 3:"9,#,#,1"Return false*/class Solution {public:bool isValidSerialization(string preorder) {string s = "";for (int i = 0; i < preorder.length(); i++) {if (preorder[i] != '#') {s += 'n';while (preorder[i] != ',' && i < preorder.length()) i++;} else {s += '#';while (s.length() >= 2 && s.back() == '#' && s[s.length() - 2] == '#') {if (s.length() == 2) return false;s.pop_back();s.pop_back();s.pop_back();s +='#';}i++;}}return s =="#";}};


0 0
原创粉丝点击