数据结构——树的孩子兄弟表示法

 

  
    
#include < iostream >
using namespace std;

typedef
struct CSNode
{
char data;
struct CSNode * firstchild , * nextsibling ;
}
* CSTree;


// ====================================================
#define MAXSIZE 10
CSTree q[MAXSIZE];
int count = 0 ;

// 初始化
void init_cstree(CSTree & tree)
{

tree
-> firstchild = NULL;
tree
-> nextsibling = NULL;
}

// 创建树
void creat_cstree(CSTree & T)
{

FILE
* fin = fopen( " 树的孩子兄弟表示法.txt " , " r " );
char fa = ' ' ,ch = ' ' ;
for ( fscanf(fin, " %c%c " , & fa, & ch); ch != ' # ' ; fscanf(fin, " %c%c " , & fa, & ch) )
{
CSTree p
= (CSTree)malloc( sizeof (CSTree));
init_cstree(p);
p
-> data = ch;
q[
++ count] = p;

if ( ' # ' == fa)
T
= p;
else
{
CSTree s
= (CSTree)malloc( sizeof (CSTree));
int i;
for (i = 1 ;i <= MAXSIZE;i ++ )
{
if (q[i] -> data == fa)
{
s
= q[i];
break ;
}
}
if ( ! (s -> firstchild) ) // 如果该双亲结点还没有接孩子节点
s -> firstchild = p;
else // 如果该双亲结点已经接了孩子节点
{
CSTree temp
= s -> firstchild;
while (NULL != temp -> nextsibling)
{
temp
= temp -> nextsibling;
}
temp
-> nextsibling = p;
}
}
}
fclose(fin);
}
// 前序遍历
void print_cstree(CSTree & tree)
{
cout
<< tree -> data << " " ;
if (tree -> firstchild != NULL)
print_cstree(tree
-> firstchild);
if (tree -> nextsibling != NULL)
print_cstree(tree
-> nextsibling);
}
// 输出树中所有从根到叶子结点的路径的算法
// void allpath_tree()
int main()
{
CSTree cstree;
cstree
= (CSTree)malloc( sizeof (CSTree));
init_cstree(cstree);
creat_cstree(cstree);
// 输出树
print_cstree(cstree);
cout
<< endl;
return 0 ;
}

 

 

 

你可能感兴趣的:(数据结构)