您的位置:首页 > 其它

57.序列化二叉树(第二次做依然觉得有难度)

2016-05-19 20:54 357 查看
序列化二叉树

参与人数: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 *”

第二次做:

/*
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) + 1] ;
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 ;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: