数组建立二叉树的问题(c语言)

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:13:53
先说递归算法:
结构定义:
typedef int datatype;
typedef struct node //定义结构
{
datatype data;
struct node *lchild ,*rchild;
}BTNode,*BTREE;

递归建立二叉树
BTREE createbt2(int a[],int i,int n)
{
BTREE p;

if(i>n) return NULL;
else
{
p=(BTREE)malloc(sizeof(BTNode));
p->data =a[i];
p->lchild =createbt2(a,2*i,n);
p->rchild =createbt2(a,2*i+1,n);
return p;
}
}

我的问题就是:函数中那两个参数i和n分别是什么意思,目前比较要命的是我也不知道这是个先序中序还是后序的算法,因为搞不懂那个参数,也懒得调试,麻烦哪位高人给我解释解释,懒得解释把那注释给我写详细点也行,谢谢啊~

下边还有一个非递归的:
BTREE createbt3(int a[],int n)
{
int i;
BTREE *pt;

pt=(BTREE *)malloc(sizeof(BTREE)*n);

for(i=0;i<n;i++)
{
if(a[i]!=0)
{
pt[i]=(BTREE)malloc(sizeof(BTREE)*n);
pt[i]->data =a[i];
}
else
{
pt[i]=NULL;
}
}

for(

BTREE createbt2(int a[],int i,int n)
{
BTREE p;

if(i>n) return NULLelse
{
p=(BTREE)malloc(sizeof(BTNode));;//判断节点是不是虚节点,如果是的话就分配一个地址

p->data =a[i]; //用于存放数据的一个数组
p->lchild =createbt2(a,2*i,n); //你先把这个二叉树补充成带有NULL的完全二叉树,I表示从根往下数第几个节点
p->rchild =createbt2(a,2*i+1,n);
return p;
}
}
现在这个二叉树还在构造,所以不能判断是什么序的,具体什么序是看二叉树的访问的时候跟节点的位置,如果是先跟节点就是前序,同理也有中序和后序

第一题,i表示在节点在树种的索引,根节点第一个,接下来第二个,第三个。。。
n表示数组的长度,你节点的索引不可能会大于数组的长度。所以要index<=n