您的位置:首页 > 职场人生

面试题69:序列化二叉树

2016-03-30 20:44 387 查看
题目:

请实现两个函数,分别用来序列化和反序列化二叉树。

思路:

序列化是指将一个二叉树保存到文件中,反序列化是指从文件中读取二叉树结点值重构二叉树。

我们采用先序遍历将二叉树的值保存到文件中,为了保证重构二叉树时结点能被插到正确的位置,我们将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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: