Establecer una estructura de lista enlazada de árbol binario
tema
Se sabe que el árbol binario no vacío adopta una estructura de almacenamiento secuencial, y la información de los datos de los nodos se almacena secuencialmente en el arreglo BT [0 ... MAXZize-1] (si el elemento es 0, significa que no existe en el árbol binario), por favor escriba un algoritmo para generar el árbol binario La estructura de la lista enlazada.
análisis
Cuando se realiza un bucle a un cierto punto de BT [i], es principalmente para encontrar el nodo padre del nodo, y cuyo nodo hijo es el nodo BT [i] conectado es el principal problema.
- Al calcular el nodo padre, j = (i-1) / 2 ;
- ¿Es el hijo izquierdo o el hijo derecho de j ?
(1) Si i-2 * j-1 == 0 , significa que es el hijo izquierdo de j .
(2) Si i-2 * j-1! = 0 significa que es el hijo correcto de j
Código
Tipo de datos básico
El siguiente código puede tener tipos de datos similares, por lo que no lo repetiré más tarde.
#define MAXSize 100
typedef struct bNode{
int data;
struct bNode *lchild,*rchild;
}BTNode,*BTREE;
#define len sizeof(BTNode)
Código central
// 建立二叉树链表结构
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;
}