树的孩子兄弟节点

#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;
}

  


原文地址:https://www.cnblogs.com/zhanglanyun/p/2198248.html