设计一个算法将一棵以二叉链方式存储的二叉树t按顺序方式存储到数组A中。 请完善算法代码,使能够执行。

2024-11-06 09:53:09
推荐回答(1个)
回答(1):

#include 
//定义二叉树的存储结构
struct BTNode
{
    char data;
    BTNode* lchild;
    BTNode* rchild;
}BTNode;
void Ctree(struct BTNode* t,char A[],int i)
{
    if(t!=NULL)
    {
        A[i]=t->data;       
        Ctree(t->lchild,A,i*2);
        Ctree(t->rchild,A,i*2+1);
    }
    else
    {
        A[i]=' ';
    }
}
int main(void)
{
    //建立二叉链表存储结构的二叉树,以p1为根节点,p2,p3分别为p1的左右子树,p4为p3的左子树
    struct BTNode p1,p2,p3,p4;
    struct BTNode *t=&p1;
    p1.data='a';
    p2.data='b';
    p3.data='c';
    p4.data='d';
    p1.lchild=&p2;
    p1.rchild=&p3;
    p2.lchild=NULL;
    p2.rchild=NULL;
    p3.lchild=&p4;
    p3.rchild=NULL;
    p4.lchild=NULL;
    p4.rchild=NULL;
    char A[20]={NULL}; //定义字符数组存储转换后的二叉树存储结构
    Ctree(t,A,1); //调用上述转换算法
    //显示结果
    printf("以下是转换后数组的值:\n");
    for(int i=1;i<20;i++)
    {
        if(A[i]!=NULL)
            printf("A[%d]=%c\n",i,A[i]);
    }
    return 0;
}

建议你再画图理解一下,会比较容易理解