请求高手:如何将一棵二叉树保存到文件,文件格式随便定义。然后再从文件中读出同时创建这棵树? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在文件中,用一个fseek的东东,即文件内的偏移量把它想象成内存中的指针,那么,你的问题就解决了 前序遍历写入文本文件ofstream outfile("outfile.txt");treenode 是一个二叉树节点,lchild指向左子树,rchild指向右子树. value为一个值struct treenode{ treenode* lchild; treenode* rchild; int value;}template<typename valType> preorder(treenode* ptr,ofstream& outfile){ if(ptr) { outfile<<ptr->value; if(ptr->lchild) preorder(ptr->lchild,outfile); if(ptr->rchile) preorder(prt->rchile,outfile); }}读文件就是一个反向生成二叉树过程 模板template<typename valType>没用,函数少了个返回参数 void 也就是二叉树的线索化就行了二叉树按中序线索化的算法 typedef enum { Link,Thread} PointerTag; //枚举值Link和Thread分别为0,1 typedef struct node{ DataType data; PointerTag ltag,rtag; //左右标志 Struct node *lchild,*rchild; } BinThrNode;\\线索二叉树的结点类型 typedef BinThrNode *BinThrTree; BinThrNode *pre=NULL; //全局量 void lnorderThreading(BinThrTree p) {//将二叉树p中序线索化 if(p){ //p非空时,当前访问结点是*p InorderThreading(p->lchild); //左子树线索化 //以下直至右子树线索化之前相当于遍历算法中访问结点的操作 p->ltag=(p->lchild)?Link:Thread; //左指针非空时左标志为Link //(即0),否则为Thread(即1) p->rtag=(p->rchild)?Link:Thread; *(pre){ //若*p的前趋*pre存在 if(pre->rtag==Thread) //若*p的前趋右标志为线索 pre->rchild=p; //令*pre的右线索指向中序后继 if(p->ltag==Thread) //*p的左标志为线索 p->lchild=pre; //令*p的左线索指向中序前趋 } // 完成处理*pre的线索 pre=p; //令pre是下一访问结点的中序前趋 InorderThreeding(p->rehild); //右子树线索化 }//endif } //InorderThreading 控件的移动!! 急:vc中通过按钮控制edit输出文字 mscomm 串口通讯问题 想要多次调用WM_ERASEBKGND如何解决? 求助树控件.... 谁能告诉我在project options筐里的那串字符的意思 vc中的dbgrid控件! 请教 我在对话框上加了一个RichEdit,结果对话框就不能创建了,为什么呢? wu.rc(416): error RC2104: undefined keyword or key name: ID_INDICATOR_NUM 2004年要过去了,庆祝一下 没有过微软数字认证的驱动,如果想在安装时不让他自动弹出 "警告" 应该怎样编程处理
把它想象成内存中的指针,那么,你的问题就解决了
ofstream outfile("outfile.txt");
treenode 是一个二叉树节点,lchild指向左子树,rchild指向右子树. value为一个值
struct treenode
{
treenode* lchild;
treenode* rchild;
int value;
}
template<typename valType> preorder(treenode* ptr,ofstream& outfile)
{
if(ptr)
{
outfile<<ptr->value;
if(ptr->lchild) preorder(ptr->lchild,outfile);
if(ptr->rchile) preorder(prt->rchile,outfile);
}
}读文件就是一个反向生成二叉树过程
二叉树按中序线索化的算法
typedef enum { Link,Thread} PointerTag; //枚举值Link和Thread分别为0,1
typedef struct node{
DataType data;
PointerTag ltag,rtag; //左右标志
Struct node *lchild,*rchild;
} BinThrNode;\\线索二叉树的结点类型
typedef BinThrNode *BinThrTree;
BinThrNode *pre=NULL; //全局量 void lnorderThreading(BinThrTree p)
{//将二叉树p中序线索化
if(p){ //p非空时,当前访问结点是*p
InorderThreading(p->lchild); //左子树线索化
//以下直至右子树线索化之前相当于遍历算法中访问结点的操作
p->ltag=(p->lchild)?Link:Thread; //左指针非空时左标志为Link
//(即0),否则为Thread(即1)
p->rtag=(p->rchild)?Link:Thread;
*(pre){ //若*p的前趋*pre存在
if(pre->rtag==Thread) //若*p的前趋右标志为线索
pre->rchild=p; //令*pre的右线索指向中序后继
if(p->ltag==Thread) //*p的左标志为线索
p->lchild=pre; //令*p的左线索指向中序前趋
} // 完成处理*pre的线索
pre=p; //令pre是下一访问结点的中序前趋
InorderThreeding(p->rehild); //右子树线索化
}//endif
} //InorderThreading