序列化二叉树
来源:互联网 发布:网站幻灯片js代码 编辑:程序博客网 时间:2024/06/08 01:05
题目:
请实现两个函数,分别用来序列化和反序列化二叉树
牛客网上通过的代码:
class Solution {private: TreeNode* decode(char *&str) { if(*str=='#'){ str++; return NULL; } int num = 0; while(*str != ',') num = num*10 + (*(str++)-'0'); str++; TreeNode *root = new TreeNode(num); root->left = decode(str); root->right = decode(str); return root; }public: char* Serialize(TreeNode *root) { if(!root) return "#"; string r = to_string(root->val); r.push_back(','); char *left = Serialize(root->left); char *right = Serialize(root->right); char *ret = new char[strlen(left) + strlen(right) + r.size()]; strcpy(ret, r.c_str()); strcat(ret, left); strcat(ret, right); return ret; } TreeNode* Deserialize(char *str) { return decode(str); }};
《剑指offer》上的代码,更容易理解:
void Serialize( BinaryTreeNode* pRoot, ostream& stream ){ if ( pRoot == NULL ) { stream << "$,"; return ; } stream << pRoot->m_nvalue << ','; Serialize( pRoot->m_pLeft, stream ); Serialize( pRoot->m_pRight, stream );}void Deserialize( BinaryTreeNode** pRoot, istream& stream ){ int number; if ( ReadStream( stream, &number ) ) { *pRoot = new BinaryTreeNode(); (*pRoot)->m_nvalue = number; (*pRoot)->m_pLeft = NULL; (*pRoot)->m_pRight = NULL; Deserialize( &((*pRoot)->m_pLeft), stream ); Deserialize( &((*pRoot)->m_pRight), stream ); }}
阅读全文
0 0
- 二叉树序列化
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 二叉树序列化
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- 序列化二叉树
- antd修改默认样式
- Python(io)读取文件
- DAY61 jQuery基础2
- 【二叉搜索树】二叉搜索树的实现
- 用composer搭建php框架(三)--MVC之控制器
- 序列化二叉树
- vue2.0中写一个能在外面访问的全局函数
- codeforces314D 二分+滑窗
- ip
- 使用RxJava实现PullScrollView,PullListView, PullGridView 等进入自动下拉刷新
- hdu6125-(状态压缩+分组背包)
- 各种压缩格式比较
- memcached完全剖析–1. memcached的基础
- Docker入门笔记