刷题——序列化二叉树

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

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);
}
相关推荐
波音彬要多做24 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Noah_aa35 分钟前
代码随想录算法训练营第五十六天 | 图 | 拓扑排序(BFS)
数据结构
KpLn_HJL1 小时前
leetcode - 2139. Minimum Moves to Reach Target Score
java·数据结构·leetcode
AC使者7 小时前
5820 丰富的周日生活
数据结构·算法
无 证明8 小时前
new 分配空间;引用
数据结构·c++
别NULL12 小时前
机试题——疯长的草
数据结构·c++·算法
ZSYP-S13 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
唐叔在学习13 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA14 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
武昌库里写JAVA17 小时前
浅谈怎样系统的准备前端面试
数据结构·vue.js·spring boot·算法·课程设计