题解 | #序列化二叉树#

序列化二叉树

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

层次遍历序列化二叉树
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    char* Serialize(TreeNode *root) {    
        queue<TreeNode *> q;
        q.push(root);
        string s="";
        while(!q.empty()){
            int n=q.size();
            for(int i=0;i<n;i++){
                TreeNode* temp=q.front();
                q.pop();
                if(temp==NULL)
                {
                    s+="#,";
                    continue;
                }
                s+=to_string(temp->val)+",";
                q.push(temp->left);
                q.push(temp->right);
            }
        }
        char *ret=new char[s.length()+1];
        strcpy(ret,s.c_str());
        return ret;
    }
    TreeNode* Deserialize(char *str) {
        string s=str;
        TreeNode* ans=NULL;
        int cur=0;
        queue<TreeNode*> q;
        if(s[cur]!='#'){
            int num=0;
            while(s[cur]!=','){
                num=num*10+s[cur]-'0';
                cur++;
            }
            cur++;
            ans=new TreeNode(num);
            q.push(ans);
        }else return NULL;
        while(!q.empty()){
            TreeNode* node=q.front();
            q.pop();
            if(s[cur]!='#'){
                int num=0;
                 while(s[cur]!=','){
                    num=num*10+s[cur]-'0';
                    cur++;
                 }
                cur++;
                TreeNode* temp=new TreeNode(num);
                node->left=temp;
                q.push(temp);
            }else{
                cur+=2;
            }
           if(s[cur]!='#'){
                int num=0;
                 while(s[cur]!=','){
                    num=num*10+s[cur]-'0';
                    cur++;
                 }
                cur++;
                TreeNode* temp=new TreeNode(num);
                node->right=temp;
               q.push(temp);
            }else{
              cur+=2;
           }
            
        }
        return ans;
    }
};
全部评论

相关推荐

下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 20:15
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务