57.序列化二叉树(第二次做依然觉得有难度)
2016-05-19 20:54
357 查看
序列化二叉树
参与人数:1044时间限制:1秒空间限制:32768K
算法知识视频讲解
请实现两个函数,分别用来序列化和反序列化二叉树
Serialize函数中
第二次做:
参与人数: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 ; } };
相关文章推荐
- Skynumber
- nyoj 528 找球号(三)
- Struts2_ActionSupport和通配符映射和动态方法调用
- 寺庙逃脱
- JAVA设计模式(19):行为型-观察者模式(Observer)
- LINUX——查看操作系统/CPU/内存信息
- LinearEquations
- 卸载Openfire
- ZooKeeper:Quick Start
- Adam学习24之MarkDuplicatesSuite修改后有问题
- 【cocos2dx 3.3 lua】02 去掉调试信息以及多分辨率适配
- 从巴菲特10亿美元买苹果股 看“硬件公司”的低谷期
- MySQL服务无法启动 3534
- hdu 2256(矩阵快速幂)
- UVA550 Multiplying by Rotation
- 纸牌游戏
- Tornado异步IO
- java模拟接口回调
- HDU 5335 Walk Out
- UVA575 Skew Binary