Verify Preorder Serialization of a Binary Tree

    xiaoxiao2025-07-17  2

    给的字符串是二叉树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; else return 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); } } } };

    转载请注明原文地址: https://ju.6miu.com/read-1300788.html
    最新回复(0)