题解 | #序列化二叉树#

序列化二叉树

http://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

class Solution { public: char* Serialize(TreeNode root) {
char
s = new char[100]; if (!root) { s[0] = '#'; return s; } int check = 0; // To record subscript.

    queue<TreeNode*> q;
    q.push(root);
    s[check++] = (char) root->val;
    int sz = q.size();
    
    while (q.size()) {
        while (sz--) {
            if (q.front()->left) {
                q.push(q.front()->left);
                s[check++] = (char) q.front()->left->val;
            }
            else {
                s[check++] = '#';
            }
            if (q.front()->right) {
                q.push(q.front()->right);
                s[check++] = (char) q.front()->right->val;
            }
            else {
                s[check++] = '#';
            }
            q.pop();
        }
        sz = q.size();
    }
    s[check++] = '*';
    return s;
}
TreeNode* Deserialize(char *str) {
    TreeNode* ans = nullptr;
    if (str[0] == '#') return ans;
    int size = 0;
    int check = 0;
    while (str[check++] != '*') {
        size++;
    }
    queue<TreeNode*> q;
    
    // Initialize
    check = 0;
    ans = new TreeNode((int) str[check++]);
    q.push(ans);
    
    while (check < size) {
        int sz = q.size();
        while (sz--) {
            if(str[check] != '#') {
                TreeNode* left = new TreeNode((int) str[check] > 0 ? (int) str[check] : 256 + str[check]);
                q.front()->left = left;
                q.push(q.front()->left);
            }
            check++;
            if(str[check] != '#') {
                TreeNode* right = new TreeNode((int) str[check] > 0 ? (int) str[check] : 256 + str[check]);
                q.front()->right = right;
                q.push(q.front()->right);
            }
            check++;
            q.pop();
        }
    }
    return ans;
}

};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务