57.序列化二叉树

序列化二叉树
  • 参与人数:1044时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树
// 55.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>
#include <string>
using namespace::std;

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) {
		if (root == NULL) return "#";

		string r = to_string(root->val);
		r.push_back(',');

		char * left = Serialize(root->left);
		char* right = Serialize(root->right);

		char* p = new char[strlen(left) + strlen(right) + r.size()];
		strcpy(p, r.c_str());
		strcat(p, left);
		strcat(p, right);

		return p;
	}
	TreeNode* Deserialize(char *str) {
		return decode(str);
	}
private:
	TreeNode* decode(char *&str) {
		if (*str == '#') {
			++str;
			return NULL;
		}

		int num = 0;
		while (*str != ',')
			num = num * 10 + (*(str++) - '0');
		TreeNode* p = new TreeNode(num);
		++str;
		p->left = decode(str);
		p->right = decode(str);
		return p;
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	//TreeNode p1(1);
	//TreeNode p2(2);
	//TreeNode p3(3);
	//TreeNode p4(4);
	//TreeNode p5(5);
	//TreeNode p6(6);

	//p1.left = &p2;
	//p1.right = &p3;

	//p2.left = &p4;

	//p3.left = &p5;
	//p3.right = &p6;

	TreeNode p1(100);
	TreeNode p2(50);
	TreeNode p3(150);

	p1.left = &p2;
	p1.right = &p3;

	Solution s;
	char* test = s.Serialize(&p1);
	TreeNode* result = s.Deserialize(test);
	return 0;
}

Serialize函数中
if (root == NULL) return "#";
双引号换成单引号
if (root == NULL) return '#';
会报错:error C2440: “return”: 无法从“char”转换为“char *”

你可能感兴趣的:(57.序列化二叉树)