Verify Preorder Serialization of a Binary Tree

来源:互联网 发布:手机版文章页源码 编辑:程序博客网 时间:2024/05/01 11:34

给的字符串是二叉树dfs搜了一遍的结果,也就是先序遍历的结果。当出现叶节点时,就会出现两个"#",因为叶节点没有子节点。此时可以将该叶节点消除,即用一个"#"代替,一层层向上归并消除直至根节点,最终只剩一个"#"。由于字符串操作不方便,所以转化成vector<int>,vector中的0代表'#',1代表有value。

class Solution {public:bool isValidSerialization(string preorder) {vector<int> vec;for (auto i = 0; i < preorder.size(); i++){if (preorder[i] == '#'&&preorder[i] != ',')vec.push_back(0);if (preorder[i] != '#'&&preorder[i] != ',')vec.push_back(1);if (preorder[i] != ','){while (preorder[i + 1] != ','&&i +1< preorder.size())i++;}}if (vec.size() == 1&&vec[0]==0)return true;if (vec.size() == 1&&vec[0]==1)return false;if (vec.size() == 2)return false;vector<char> res;for (auto i = 0; i < vec.size(); i++){res.push_back(vec[i]);check(res);}if (res.size() == 1 && res[0] == 0)return true;elsereturn false;}void check(vector<char> & input){if (input.size() >= 3){if (input.back() == 0&&*(input.end() - 2) == 0&&*(input.end() - 3) !=0){input.erase(input.end() - 1);input.erase(input.end() - 1);input.erase(input.end() - 1);input.push_back(0);check(input);}}}};


0 0
原创粉丝点击