建立二叉树链表结构

建立二叉树链表结构

题目

已知非空二叉树采用顺序存储结构,结点的数据信息依次存储在数组BT[0…MAXZize-1]中(若元素为0,表示在二叉树中不存在),请写一算法,生成该二叉树的链表结构。

分析

循环到某一点BT[i]时,主要是求结点的双亲结点,BT[i]结点到底链接在谁的的孩子结点,这是个主要的问题。

  • 计算双亲结点时,j=(i-1)/2;
  • 到底是j的左孩子还是右孩子呢
    (1)若i-2*j-1==0,说明是j的左孩子。
    (2)若i-2*j-1!=0 说明是j的右孩子

代码

基本数据类型

后面的代码可能会出现相似的数据类型,后面就不重复写了。

#define MAXSize 100
typedef struct bNode{    
	int data;    
	struct bNode *lchild,*rchild;   
 }BTNode,*BTREE;
 #define len sizeof(BTNode)

核心代码

// 建立二叉树链表结构
BTREE CTREATEBLINK(int BT[],int n){    
	BTREE T=NULL,PRT[MAXSize];   
	 int j=0;    
	 PRT[j]=(BTREE) malloc(len);    
	 PRT[j]->data=BT[0];    
	 PRT[j]->rchild =NULL;   
	  PRT[j]->lchild= NULL ;    
	  T=PRT[j];    
	  for (int i = 1; i < n; i++)    {        
	  	if (BT[i]!=0)        {            
	  		PRT[i]=(BTREE) malloc(len);            
	  		PRT[i]->data=BT[i];           
	  	 	PRT[i]->rchild =NULL;           
	  	 	 PRT[i]->lchild= NULL ;            
	  	  	 j = (i-1)/2;            
	  	 	  if (i-2*j-1==0)            {                
	  	   		PRT[j]->lchild=PRT[i];            
	  	 	  }else            {               
	  	   		 PRT[j]->rchild=PRT[i];           
	  	  	  }                                 
	  	} // if   
	 }// for         
	return T;
}

猜你喜欢

转载自blog.csdn.net/honeylife/article/details/99968158