面试题69:序列化二叉树

来源:互联网 发布:java jdk1.7 32位下载 编辑:程序博客网 时间:2024/05/12 06:38

题目:

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

思路:

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

我们采用先序遍历将二叉树的值保存到文件中,为了保证重构二叉树时结点能被插到正确的位置,我们将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;}


0 0
原创粉丝点击