Árbol de búsqueda binaria (BST) predecesor y sucesor, funciones de inserción y eliminación

La naturaleza del árbol de búsqueda binaria:
1,Todos los nodos del subárbol izquierdoEl valor de es menor o igual que el valor de su nodo raíz.
2,Todos los nodos del subárbol derechoEl valor de es mayor o igual que el valor de su nodo raíz.
Naturaleza máxima del montón:
1,Todos los nodos en los dos subárbolesEl valor de no es mayor que el valor de su nodo raíz.

1. Predecesor y sucesor:
actuando en un árbol binarioCruce de orden medio (no orden de capa), El orden después del recorrido, el nodo anterior del nodo actual es el nodo predecesor de este nodo; el siguiente nodo del nodo actual es el nodo sucesor de este nodo.
1.1 Para el árbol de búsqueda binaria:
nodos xnodo predecesor: menor que el x.keynodo clave más grande (15 precursor precursor precursor precursor 4,7 6,17 6) es;
nodos xsucesores del nodo: mayor que x.keyel nodo clave más pequeño (6 El sucesor de 7, 7, el sucesor de 9, el sucesor de 13 15); el
Inserte la descripción de la imagen aquí
pseudocódigo sucesor:

int TreeSuccessor(node x)
{
    
    
	if(x.right != NULL) return Tree_minmum(x.right);
	y = x.p;
	while(y!=NULL && x ==y.right){
    
     //若x为右节点,则后继为最低的祖先且其左孩子也是祖先(13的后继15)
		x = y;
		y = y.p;
	}
	return y; //若x为左节点,则返回父节点
}

2. Inserción y eliminación:
2.1. Inserción:
El nodo recién insertado es siempre un nodo hojaPor lo tanto, la posición adecuada encontrada está vacía y el nodo principal del nodo vacío se registra para su inserción.
Insertar pseudocódigo:

void TreeInsert(Tree T, node z)
{
    
    
	y = NULL;
	x = T.root; //x用于找位置指导为空即找到,y为x的父节点
	while(x != NULL){
    
    
		y = x;
		if(z.key<x.key){
    
    
			x = x.left;
		}else{
    
    
			x = x.right;
		}
	}
	z.p = y;
	if(y == NULL){
    
     // 树为空
		T.root = z;
	}
	else if (z.key<y.key){
    
    
		y.left = z;
	}
	else{
    
    
		y.right = z;
	}
}

13 se inserta debajo de 15:
13 se inserta debajo de 15
2.2. Eliminar: Hay
tres situaciones:
Inserte la descripción de la imagen aquí
a) Situación simple: hay solo un niño o ningún niño, entoncesReemplazar con otro niño o NULLz
Inserte la descripción de la imagen aquí
b) Situación complicada: Hay dos hijos, divididos en dos situaciones, sea el hijo adecuado el sucesor o no.
Propósito: El reemplazo zes su sucesor y( zvalor mínimo mayor que )

b1) El hijo adecuado es su sucesor:yReemplazar con sucesorz
Inserte la descripción de la imagen aquí
El hijo derecho es el sucesor (mayor que su mínimo), lo que indica que el hijo derecho no tiene hijo izquierdo.
Inserte la descripción de la imagen aquí
b2) El hijo adecuado no es su sucesor:Con un sucesor yen su lugar el derecho del niño y, en ylugar dez
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Código falso:

// v数代替u树的小函数
void Transplant(Tree T, node u,node v)
{
    
    
	if(u.p = NULL) t.root = v;
	else if(u = u.p.left) u.p.left = v;
	else u.p.right = v;
	if(v != NULL) v.p = u.p;
}

Función Eliminar nodo:
Inserte la descripción de la imagen aquí
** Referencia: ** Introducción al algoritmo: Sección 12.2 Consultar árbol de búsqueda binaria y Sección 12.3 Insertar y eliminar

para resumir:

1. La naturaleza del árbol de búsqueda binaria: todos los nodos del subárbol izquierdo son más pequeños que el nodo raíz (el subárbol derecho es mayor que).
2. Predecesor y sucesor se refieren a los nodos después del recorrido en orden.
3. El sucesor (predecesor) del árbol de búsqueda binaria es el nodo más pequeño (más grande) mayor que (menor que) el nodo.
4. El nodo recién insertado en el árbol de búsqueda binaria es siempre un nodo hoja, comenzando desde el nodo raíz y comparándolo con el nodo hoja vacío. (No es lo mismo que insertar un nodo en el montón. El montón se coloca primero al final del montón y luego se compara con el nodo raíz, se mueve hacia arriba si es más grande).
5. Eliminar del árbol de búsqueda binaria: si solo hay un hijo o ningún hijo, reemplace el nodo eliminado con otro hijo o NULL z; si hay dos hijos, reemplace el nodo eliminado con su sucesor.
6. El tiempo de las operaciones básicas (insertar, eliminar, predecesor, sucesor, máximo, mínimo) en el árbol de búsqueda binaria es proporcional a la altura del árbol, porque la altura esperada es lg (n), por lo tanto,Tiempo medio de funcionamientoEs lg (n).
7. Árboles rojos y negrosPeor tiempo de ejecuciónEs lg (n).

Supongo que te gusta

Origin blog.csdn.net/qq_33726635/article/details/105714521
Recomendado
Clasificación