VC、C++保存二叉树在文件中然后读出来

来源:百度知道 编辑:UC知道 时间:2024/05/31 05:11:06
如题。要具体的算法,代码。谢谢

只要给每个节点按照它在二叉树中的位置给与其一个唯一的编号,那么只要记录每个节点的编号和相关信息,就能够记录一整棵二叉树
编号方式:
用n(x)表示节点x的编号
1、如果x是根节点,那么n(x)=1
2、如果x不是根节点,那么x有亲节点p;如果x是p的左子节点,那么n(x)=n(p)*2,否则n(x)=n(p)*2+1

在文件中记录格式:
节点总数
节点1编号 节点1信息
节点2编号 节点2信息
...
节点n编号 节点n信息

比如

3
3 100
1 200
2 1

这样就记录了一个有3个节点的二叉树,其中根节点信息为200,左子节点信息为1,右子节点信息为100

读取时,对于每一个编号i,从i的二进制次高位开始,逐位判断,就可以得到i所表示的节点的位置
比如i=5,它的二进制是101,除掉最高位是01
那么它就是根节点的左子节点(0)的右子节点(1)

C++代码如下

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Binary_Tree
{
private:
struct Node
{
int data;
Node *parent,*left,*right;
Node()
{
parent=left=right=0;
data=-1;
}
};
Node *root;
int size;
void Clear(Node*);
void Cl