剑指offer——序列化二叉树

本文介绍了一种二叉树的序列化和反序列化方法,通过层序遍历将二叉树转化为字符串,再从字符串中重建二叉树。序列化过程将树的节点值和空节点标记转换为字符串,反序列化则逆向操作,实现了二叉树的有效存储和重构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:请实现两个函数,分别用来序列化和反序列化二叉树

在这里插入图片描述
序列化:得到层序序列 10,20,30,4,#,#,5,6,#,#,#,#,#,7,#,
反序列化:重建二叉树。

/*
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) {    //注意返回值为char指针,应该用char数组
        if(root==NULL) return NULL;
        string record;
        Serialize(root,record);
        char* result=new char[record.length()+1];
        unsigned int i=0;
        for(;i<record.length();i++)
            result[i]=record[i];
        result[i]='\0';
        return result;
    }
    void Serialize(TreeNode *root,string &str)
    {
        if(root==NULL)  //不存在,为空节点,输入#,然后返回
        {
            str+="#,";
            return;
        }
        str+=to_string(root->val)+','; //输入一次存在值
        Serialize(root->left,str);
        Serialize(root->right,str);
    }
    TreeNode* Deserialize(char *str) {
        if(str==NULL) return NULL;    //惯例检查是否为空
        TreeNode* new_tree=Deserialize(&str);
        return new_tree;
    }
    TreeNode* Deserialize(char **str)  //传入二级指针才能更改
    {
        if(**str=='#')
        {
            (*str)+=2;   //跳过逗号指向下一个字符
            return NULL;  //由于是空节点,不会返回实例
        }
        int num=0;
        while(**str!='\0'&&**str!=',') //将字符串转为整数
        {
            num=num*10+(**str-'0');
            (*str)++;  
        }
        TreeNode* node=new TreeNode(num); //建立新节点
        if(**str=='\0')
            return node;
        else
            (*str)++;
        node->left=Deserialize(str);
        node->right=Deserialize(str);
        return node;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值