Árbol binario de búsqueda (árbol binario de búsqueda)
Cada nodo 1. El árbol tiene una única palabra clave
2. Si el subárbol izquierdo, todo el valor subárbol izquierdo es menor que la palabra clave raíz de palabras clave
3. Si el subárbol derecho, valor subárbol derecho de todas las palabras clave que la raíz de palabras clave de
aproximadamente 4. sub-árboles son binarias árbol de búsqueda
1. Trabajo:
Y = (S *) -> RChild
la derecha de la figura Análisis.
Código
2. código de prueba de búsqueda binaria
. //BinarySearchTree.cpp 1 2 . 3 #include <la iostream> . 4 el uso de STD espacio de nombres; . 5 . 6 el Nodo typedef struct . 7 { . 8 int datos; . 9 struct lchild el Nodo *; 10 * struct la RChild nodo; . 11} BITREE, * LPBITREE; 12 es int BSTInsert (LPBITREE T *, int X) 13 es { 14 LPBITREE P, CUR, padre = NULL; 15 * CUR = T; T es el segundo puntero // 16 al mismo tiempo (CUR = NULL!) 17 {. se inserta 18 // encontrado posición 19 // si está presente en el árbol 20 es SI (act> datos == X) 21 es { 22 es return 0; 23 es} 24 = CUR padre; @ 25 es mayor que el valor del nodo actual ---> subárbol derecho 48 / / no entre padres act = NULL = NULL se inserta en el nodo raíz IF 26 es (X> cur> Data) 27 { 28 CUR = cur> RChild; 29} 30 // menor que el valor del nodo actual ---> subárbol izquierdo 31 es el otro 32 { 33 es CUR = cur> lchild; 34} 35} espacio 36 // recién insertado nodo 37 [P = new nuevo BITREE; 38 es // determina si una memoria fracaso 39 iF (P!) 40 { 41 es Exit (0); 42 es} 43 es sustancialmente // inicializa los miembros de datos p-44 es> = Data X; 45 p-> lchild = NULL; 46 se p-> RChild = NULL; 47 // insertado en una posición apropiada 51 es P = T *; 52 es} 49 si (padre!) 50 { 75 { 53 //如果关键字小于父结点当作padre-> lchild 54 else if (x <padre-> datos) 55 padre-> lchild = p; 56 más 57 de Padres> RChild = p; 58 return 1; 59} 60 61 void MidOrderTraverse (LPBITREE T) 62 { 63 si (T) 64 { 65 MidOrderTraverse (T-> lchild); 66 tribunal << T-> << datos "->"; 67 MidOrderTraverse (T-> RChild); 68} 69} 70 71 LPBITREE BSTSearch (LPBITREE T, int x) 72 { 73 LPBITREE p; 74 si (T = NULL!) 76 p = T; 77, mientras que (p! = NULL) 78 { 79 IF (p-> Datos == X) 80 { 81 retorno P; 82} 83 la ELSE IF (p-> Datos> X) 84 { 85 P = p-> lchild; 86} 87 SI el otro (p-> datos <X) 88 { 89 P = p-> RChild; 90} 91 es} 92} NULL 93 de retorno; 94} 95 void DeleteNode (* LPBITREE S) 96 { 97 LPBITREE Q, X, Y; 98 es un subárbol izquierdo // subárbol derecho a la nula puede tomar hasta 99 SI ((S *) -> lchild) 100 { 101 q = * S; // Guardar el original y luego la primera versión 124} 102 * s = (* s) -> RChild; 103 q de borrado; 104} (! (* S) -> RChild) 105 else if 106 { 107 = q * s; 108 * s = (* s) -> lchild; 109 q de borrado; 110} 111 else //作业改为右边分析 112 { 113 x = * S; 114 y = (* s) -> lchild; 115 mientras que (y-> RChild) 116 { 117 x = y; 118 y = y-> RChild; 119} 120 (* s) -> de datos = y-> datos; 121 si (x == (* s)) 122 { 123 x-> lchild = y-> lchild; 125 otra cosa 126 { 127 x-> RChild = y-> lchild; 128} 129 y borrado; //注意空间释放哪一个 130} 131} 132 133 int BSTDelete (LPBITREE * T, int x) 134 { 135 si (* T!) 136 { 137 return 0; 138} 139 más 140 { 141 si (x == (* T) -> datos) 142 { 143 DeleteNode (T); 144} 145 else if ((* T) -> Datos> x) 146 { 147 BSTDelete (& (* T) -> lchild, x); 148} 149 else if ((* T) -> datos <x) 150 { 151 BSTDelete (& (* T) -> RChild, x); 172 tribunal << "未找到指定位置" 152} 153 return 1; 154} 155} 156 157 int main () 158 { 159 int Array [] = {89, 23, 47, 58, 25, 78, 100, 29, 68, 38}; 160 int ArrayNum = sizeof (Array) / sizeof (Array [0]); 161 LPBITREE T = NULL; 162 for (int i = 0; i <ArrayNum; i ++) 163 { 164 BSTInsert (& T, Array [i]); 165} 166 tribunal << "中序遍历:" << endl; 167 MidOrderTraverse (T); 168 tribunal << endl; 169 BSTDelete (& T, 78); 170 LPBITREE p = BSTSearch (T, 78); 171 si (p!) 174 tribunal << "查找得到的数据是:" << p-> datos << endl; 173 otra cosa 176 return 0; 177}
1 //二分查找.cpp 2 3 # include <iostream> 4 using namespace std; 5 int BinarySearch (int Array [], el valor int, int inicio, fin int) 6 { 7 si (Inicio> final) 8 { 9 return -1; 10} 11 int mediados = iniciar + (final - inicial) / 2; 12 Si (Array [mediados] == valor) 13 de retorno mediados; 14 else if (valor <Array [MID]) 15 { 16 final = mid - 1; 17 de retorno BinarySearch (Array, el valor, inicio, fin); 18} 19 más 20 { 21 start = mediados + 1; 22 de retorno BinarySearch (Array, el valor, inicio, fin); 23} 24} 25 26 //防御性编程 BinarySearchPos 27 int (int Array [], int len, valor int) 28 { 29 si (Array == NULL || len <= 0) 30 de retorno 1; 31 int start = 0; 32 final int = len - 1; 33 de retorno BinarySearch (Array, el valor, inicio, fin); 34} 35 int main () 36 { 37 //测试作业 38 39 40 return 0; 41}