刷题——序列化二叉树

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

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);
}
相关推荐
w_zero_one5 小时前
算法--构造
java·数据结构·算法
lisw059 小时前
互联网上的数据结构可视化!
数据结构·信息可视化
老师我太想进步了202614 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
YSL07012415 小时前
一文通关-----排序
数据结构·算法
夜不会漫长1 天前
C++:红黑树
数据结构·算法
冻柠檬飞冰走茶1 天前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
736c1 天前
固件开发岗算法
数据结构·算法
冻柠檬飞冰走茶1 天前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
PaperAccept2 天前
【研知有术论文发表】材料科学一区期刊,影响因子30+的纳米科技SCI,审稿严格但有效率
大数据·数据结构·科技·量子计算
Tairitsu_H2 天前
[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?
数据结构·c++·图论