我考慮過用遞回的方式,但發現沒有辦法限制高度為7啊,內置標志紀數什么的。用回圈呼叫構建又明顯太麻煩。菜鳥一枚,希望大神們能指點一下,方便的話給下關鍵部分的代碼吧~
uj5u.com熱心網友回復:
我也糾結呢,電子科大的吧uj5u.com熱心網友回復:
唉,看來大家都做得很苦惱啊..uj5u.com熱心網友回復:
附上暫時想的代碼..但執行后發現資料檔案里根本就沒有寫東西啊,不知道錯在哪里..#include <iostream>
#include <fstream>
#include<errno.h>
#include<stdlib.h>
using namespace std;
int depth=1;
struct TreeNode
{
char depth;
TreeNode* parent;
TreeNode* child0;
TreeNode* child1;
TreeNode* child2;
TreeNode* child3;
TreeNode* child4;
TreeNode* child5;
TreeNode* child6;
TreeNode* child7;
TreeNode* child8;
TreeNode* child9;
char rank;
};
TreeNode* addnode(TreeNode*& node, int depthtemp, int flag)
{TreeNode* p = new TreeNode;
p->depth = depthtemp;
node->parent = node->child0 = node->child1 = node->child2=node->child3=NULL;
node->child4=node->child5=node->child6=node->child7=node->child8=node->child9=NULL;
switch (flag)
{
case 0:
node->child0 = p;
node->rank=0;
break;
case 1:
node->child1 = p;
node->rank=1;
break;
case 2:
node->child2 = p;
node->rank=2;
break;
case 3:
node->child3 = p;
node->rank=3;
break;
case 4:
node->child4 = p;
node->rank=4;
break;
case 5:
node->child5 = p;
node->rank=5;
break;
case 6:
node->child6 = p;
node->rank=6;
break;
case 7:
node->child7 = p;
node->rank=7;
break;
case 8:
node->child8 = p;
node->rank=8;
break;
case 9:
node->child9 = p;
node->rank=9;
break;
}
return node;
}
ofstream& writetreetofile(ofstream& fout, TreeNode* node) //浜岃繘鍒跺啓鏂囦歡
{
char ch;
int data;
if (node == NULL)
{
ch = 0; // 0xFF 絀鴻妭鐐規爣蹇? fout.write(&ch, sizeof(char));
}
else
{
ch = 1; // 0x01 闈炵┖鑺傜偣鏍囧織
fout.write(&ch, sizeof(char));
data = node->depth;
fout.write((char*)&data, sizeof(char));
writetreetofile(fout, node->child0);
writetreetofile(fout, node->child1);
writetreetofile(fout, node->child2);
writetreetofile(fout, node->child3);
writetreetofile(fout, node->child4);
writetreetofile(fout, node->child5);
writetreetofile(fout, node->child6);
writetreetofile(fout, node->child7);
writetreetofile(fout, node->child8);
writetreetofile(fout, node->child9);
}
return fout;
}
void addroot(TreeNode*& node, int depthtemp) //鎻掑叆鏍硅妭鐐癸紝濡傛灉宸茬粡瀛樺湪錛岀洿鎺ヨ繑鍥?{
if (node == NULL)
{
node = new TreeNode;
node->depth = depthtemp;
node->rank=0;
node->parent = node->child0 = node->child1 = node->child2=node->child3=NULL;
node->child4=node->child5=node->child6=node->child7=node->child8=node->child9=NULL;
}
}
void erasetree(TreeNode*& node) //鍒犻櫎鏍?{
if (node == NULL)
return;
erasetree(node->child0);
erasetree(node->child1);
erasetree(node->child2);
erasetree(node->child3);
erasetree(node->child4);
erasetree(node->child5);
erasetree(node->child6);
erasetree(node->child7);
erasetree(node->child8);
erasetree(node->child9);
TreeNode* p = node->parent;
if (p != NULL)
{ switch(node->rank)
{case 0:
p->child0=NULL;
break;
case 1:
p->child1=NULL;
break;
case 2:
p->child2=NULL;
break;
case 3:
p->child3=NULL;
break;
case 4:
p->child4=NULL;
break;
case 5:
p->child5=NULL;
break;
case 6:
p->child6=NULL;
break;
case 7:
p->child7=NULL;
break;
case 8:
p->child8=NULL;
break;
case 9:
p->child9=NULL;
break;}
}
delete node;
node = NULL;
}
void createtree(TreeNode* &node)//鍒涘緩鏍?{
depth+=1;
if(depth==8)
{depth-=1;
return;
}
TreeNode* p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
p0=addnode(node,depth,0);
p1=addnode(node,depth,1);
p2=addnode(node,depth,2);
p3=addnode(node,depth,3);
p4=addnode(node,depth,4);
p5=addnode(node,depth,5);
p6=addnode(node,depth,6);
p7=addnode(node,depth,7);
p8=addnode(node,depth,8);
p9=addnode(node,depth,9);
createtree(p0);
createtree(p1);
createtree(p2);
createtree(p3);
createtree(p4);
createtree(p5);
createtree(p6);
createtree(p7);
createtree(p8);
createtree(p9);
}
int main()
{ofstream fout;
TreeNode* root = NULL;
addroot(root, depth);
createtree(root);
fout.open("tree2.dat", std::ios_base::out | std::ios_base::binary);
if (!fout.is_open())
{
std::cerr << "open file error.\n";
erasetree(root);
exit(EXIT_FAILURE);
}
writetreetofile(fout, root);
fout.close();
erasetree(root);
}
uj5u.com熱心網友回復:
哥們兒要不你也幫我檢查一下我錯在哪里..轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113021.html
標籤:數據庫及相關技術
下一篇:delphiXE代碼生成的bpl,bpi,dcp,obj,那么cbc XE可以參考bpl來直接帶包編譯嗎?沒生成hpp頭檔案!
