题解 | #序列化二叉树#

序列化二叉树

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

序列化:前序遍历,将遍历结果保存在string中。 逆序列化,将序列化得到的string输出到流stringstream中,利用流不断的输出,递归建立二叉树,逆序列化同样是一个前序的过程,创建当前结点,并且创建当前结点的左右子结点,再递归创建当前结点的左子树和右子树,若当前结点为空则返回。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    void pre_order(TreeNode* root,string& result){
        if(root==nullptr){
            result+="#";
            result+=" ";
            return;
        }
        result+=to_string(root->val);
        result+=" ";
        pre_order(root->left,result);
        pre_order(root->right,result);
    }
    
    string pre_str{};
    char* Serialize(TreeNode *root) {    
        string result{};
        pre_order(root,result);
        pre_str=result;
        return nullptr;
    }
    
    void re_build(stringstream& s_stream,TreeNode** root){
        string temp{};
        if(s_stream>>temp){
            if(temp!="#"){
                int value{};
                stringstream s_strm{};
                s_strm<<temp;
                s_strm>>value;
                *root=new TreeNode{value};
                (*root)->val=value;
                (*root)->left=nullptr;
                (*root)->right=nullptr;
                re_build(s_stream, &((*root)->left));
                re_build(s_stream, &((*root)->right));
            }
        }
    }
    
    TreeNode* Deserialize(char* str) {
        stringstream s_stream{};
        s_stream<<pre_str;
        cout<<pre_str;
        TreeNode* new_root=nullptr;
        re_build(s_stream, &new_root);
        return new_root;
    }
};




全部评论

相关推荐

03-02 17:23
门头沟学院 Java
程序员小白条:换项目,然后技术栈加点408丰富,然后有没有水赛奖项填充下,另外注意主修课程没必要写,除非全是99,100...其他分数毫无毕业,你都985了
点赞 评论 收藏
分享
钱嘛数字而已:辅导员肯定不能同意,不然你出事了,他要承担责任。但是,脚和脑子都长在你自己身上,使用它还需要向辅导员报告么? 辅导员必须按流程拒绝你,然后你拿出成年人的态度,做自己的选择。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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