刷题——序列化二叉树

序列化二叉树_牛客题霸_牛客网

char*传入,以 "!"分割,以"#"表示无

cpp 复制代码
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
void reserialize(TreeNode* root, string& str)
{
	if(root == NULL)
	{
		str += "#";
	}else{
		str += to_string(root->val) + "!";
		reserialize(root->left, str);
		reserialize(root->right, str);
	}
}

    char* Serialize(TreeNode *root) {   
        if(root == NULL) 
             return "#";  
        string ret;
    	reserialize(root, ret);
        char* charRet = new char[ret.length() + 1];
        strcpy(charRet, ret.c_str());
        charRet[ret.length()] = '\0';
	    return charRet; 
    }

    TreeNode* DeserializeFunction(char** str)
    {
        if(**str == '#')
        {
            (*str)++;
            return NULL;
        }
        int val = 0;
        while(**str != '!' && **str != '\0')
        {
            val = val*10 +((**str) - '0');
            (*str)++;
        }
        TreeNode* root =  new TreeNode(val);
        if(**str == '\0')
            return root;
        else
           (*str)++;
        root->left = DeserializeFunction(str); 
        root->right = DeserializeFunction(str);
        return root;
    }


    TreeNode* Deserialize(char *str) {
        TreeNode* res = DeserializeFunction(&str);
        return res;
    }
};

. - 力扣(LeetCode)

cpp 复制代码
//由root进入,使用str将字符串带出
void reserialize(TreeNode* root, string& str)
{
	if(root == nullptr)
	{
		str += "None,";
	}else{
		str += to_string(root->val) + ",";
		reserialize(root->left, str);
		reserialize(root->right, str);
	}
}

//将二叉树转化程字符串
string serialize(TreeNode* root)
{
	string ret;
	reserialize(root, ret);
	return ret;
}

TreeNode* rdeserialize(list<string>& dataArray)
{
	if(dataArray.front() ==  "None")
	{
		dataArray.erase(dataArray.begin());
		return nullptr;
	}
	TreeNode* root = new TreeNode(stoi(dataArray.front()));
	dataArray.erase(dataArray.begin());
	root->left = rdeserialize(dataArray);
	root->right = rdeserialize(dataArray);
	return root;
}
TreeNode* deserialize(string data)
{
	list<string> dataArray;
	string str;
	for(auto& ch : data)
	{
		if(ch == ',')
		{
			dataArray.push_back(str);
			str.clear();
		}
		else
		{
			str.push_back(ch);
		}
	}
	if(!str.empty())
	{
		dataArray.push_back(str);
		str.clear();
	}
	return rdeserialize(dataArray);
}
相关推荐
m0_547486661 天前
《数据结构教程》全套 PPT课件2026
数据结构
tryxr1 天前
矩阵的几种基础变换
java·数据结构·算法·矩阵
mmmmath_31 天前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
All for pursuit.1 天前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
All for pursuit.1 天前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
渡我白衣1 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
晴天的雨.9922 天前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
淡海水2 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1012 天前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_839080542 天前
C++常见八股
数据结构·c++·算法