面试题69:序列化二叉树
2016-03-30 20:44
387 查看
题目:
请实现两个函数,分别用来序列化和反序列化二叉树。
思路:
序列化是指将一个二叉树保存到文件中,反序列化是指从文件中读取二叉树结点值重构二叉树。
我们采用先序遍历将二叉树的值保存到文件中,为了保证重构二叉树时结点能被插到正确的位置,我们将NULL结点也存下来,用'#'表示。
请实现两个函数,分别用来序列化和反序列化二叉树。
思路:
序列化是指将一个二叉树保存到文件中,反序列化是指从文件中读取二叉树结点值重构二叉树。
我们采用先序遍历将二叉树的值保存到文件中,为了保证重构二叉树时结点能被插到正确的位置,我们将NULL结点也存下来,用'#'表示。
#include <iostream> #include <vector> #include <stack> using namespace std; struct Node{ int val; Node *left; Node *right; Node(int _val) :val(_val), left(NULL), right(NULL){} }; void Serialize(Node *root,ostream &out) { if (root == NULL) { out << "#, "; return; } out << root->val << ", "; Serialize(root->left, out); Serialize(root->right, out); } void Deserialize(Node **root, istream &in) { int num; in >> num; if (num != 0) //从屏幕读输入,用0表示空 { *root = new Node(num); Deserialize(&(*root)->left, in); Deserialize(&(*root)->right, in); } } int main() { Node *n1 = new Node(1); Node *n2 = new Node(2); Node *n3 = new Node(3); Node *n4 = new Node(4); Node *n5 = new Node(5); Node *n6 = new Node(6); Node *n7 = new Node(7); Node *n8 = new Node(8); n1->left = n2; n1->right = n3; n2->left = n4; n2->right = n5; n3->left = n6; n3->right = n7; n7->right = n8; Serialize(n1,cout); cout << endl; Node *nn1; Deserialize(&nn1, cin); Serialize(nn1, cout); cout << endl; return 0; }
相关文章推荐
- 职场加薪步步高升的五大法则
- 网易游戏面试经验(二)
- 腾讯面试记录
- Java程序员必须掌握的8大排序算法
- IOS学习之——面试问题集锦
- 码农小汪-剑指Offer之18-包含min函数的栈
- 阿里电话面试经历
- 史上最全的iOS面试题及答案
- 面试题68:按之字形顺序打印二叉树
- 码农小汪-剑指Offer之17-顺时针打印矩阵
- IOS RunLoop面试题
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- leetCode之旅(14)-Number of 1 Bits
- [leetcode-338]Counting Bits
- 2017腾讯内推实习生面试经历(已获得offer)
- 码农小汪-剑指Offer之16-二叉树的镜像
- LeetCode之旅(13)-Valid Anagram
- 面试题67:把二叉树打印成多行
- 码农小汪-剑指Offer之15-树的子结构
- 常见面试题总结