Diseñar un algoritmo para obtener la estructura de lista binaria enlazada de un árbol binario completo a partir de esta matriz. escrito en c++
El código del programa es el siguiente:
#include
#include
#define MAX 100 p>
usando el espacio de nombres std;
typedef char ElemType;
typedef struct node
{
datos ElemType ; // Campo de datos
struct node *left; //Puntero secundario izquierdo
struct node *right; //Puntero secundario derecho
}.
BTNode;
//Inicializa la matriz de nodos de la lista binaria enlazada
void InitNodes(BTNode *nodes[], valores ElemType[], int size)
{ p>
int i;
for(i=0; i { nodos[i] = nuevo BTNode( ); nodos[i]->datos = valores[i]; } } //MidOrder recorrido del árbol binario void MidOrderTravel(BTNode *root) { if(root != NULL) { p> MidOrderTravel (raíz->izquierda); cout< MidOrderTravel (raíz->derecha); } } // Basado en la estructura de almacenamiento secuencial del árbol binario, genere una estructura de lista binaria vinculada para el árbol binario BTNode *CreateBinaryTree(BTNode *nodes[] , int tamaño) { BTNode * root; int i; if (tamaño < 1) return NULL; for(i=0; i< tamaño; i++) { si (2*i+1 >= tamaño ) nodos[ i]-> left = NULL; else if(nodos[2*i+1]->datos = = ' ') nodos[i]->left = NULL; else nodos[i]->left = nodos[2 *i+ 1]; if(2*i+2 >= tamaño) nodos[i]->right = NULL; si no(nodos[ 2*i+2]->datos == ' ') nodos[i]->right = NULL; else nodos[i] ->derecha = nodos[2* i+2]; } raíz = nodos[0]; devolver raíz; } void main() { Valores ElemType[] = {'A','B','C','D ','E','F' ,'G'}; //Valores ElemType[] = {'A','B','C',','D','E '}; BTNode *raíz;< BTNode *nodos[MAX]; int tamaño = 7; InitNodes( nodos, valores, tamaño); root = CreateBinaryTree(nodos, tamaño); cout<< "Secuencia transversal de orden medio:"; Orden media Travel(root); cout<< end; } Un árbol binario completo es una estructura de datos eficiente. Un árbol binario completo se deriva de un. árbol binario completo. Un árbol binario de profundidad K y n nodos se dice que es un árbol binario de profundidad K si y sólo si cada nodo de un árbol binario de profundidad K corresponde a un nodo numerado del 1 al n en un árbol binario de profundidad K. es un árbol binario completo. Si como máximo el grado de los nodos en los dos niveles inferiores es menor que 2, y los nodos en la parte inferior están concentrados en algunas posiciones en el lado izquierdo del nivel y algunos nodos en el derecho Si faltan lados del nivel en el último nivel del nivel, entonces este árbol binario se convierte en un árbol binario completo. Extendido La idea de juzgar si un árbol es un árbol binario completo: 1. Si el árbol está vacío, aparece un mensaje de error. se devolverá directamente 2. Si el árbol no está vacío: realice un recorrido jerárquico del árbol binario 3. , abra el nodo y coloque sus nodos secundarios izquierdo y derecho en la cola; 4. Si el nodo secundario izquierdo de un nodo está vacío y el nodo secundario derecho no está vacío, el árbol no debe ser un árbol binario completo; 5. El nodo secundario ni el nodo secundario derecho están vacíos; o tanto el nodo secundario izquierdo como el nodo secundario derecho están vacíos; de lo contrario, este árbol solo puede ser un árbol binario completo; no Un árbol binario completo. Enciclopedia Baidu - Árbol binario completo Enciclopedia Baidu - Lista enlazada