Árbol binario de búsqueda (árbol binario de búsqueda)

Á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

Copiar el código
  . //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}
Copiar el código
Copiar el código
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}

Supongo que te gusta

Origin www.cnblogs.com/mjgw/p/12590749.html
Recomendado
Clasificación