Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este artículo comenzará con los conceptos relacionados con los árboles y los árboles binarios para ayudarnos a aprender más sobre los árboles binarios.
🌈个人主页:es el camarero
🌈C语言笔记专栏:notas de lenguaje c
🌈C++笔记专栏: notas de c ++
🌈初阶数据结构笔记专栏: Notas elementales sobre la estructura de datos.
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
El árbol es una estructura de datos no lineal, que se compone den(n>=0)
Los nodos limitados forman un conjunto con una relación jerárquica. Sin embargo, el árbol tiene poco valor en la práctica, pero el árbol binario tiene mayor valor práctico (la razón por la que este conjunto se llama árbol es que tiene la raíz hacia arriba y las hojas). boca abajo. Parece mucho un árbol).
M(M>0)
conjuntos disjuntosT1、T2、....、Tm
, cada conjunto de los cualesTi(1<=i<=m)
Es otro subárbol con una estructura similar a la de un árbol. El nodo raíz de cada subárbol tiene un solo predecesor y puede tener 0 o más sucesores.Dado que la estructura de árbol es más compleja que la tabla lineal, el método de almacenamiento es más engorroso. Es necesario guardar tanto el rango de valores como la relación entre los nodos.
A continuación se muestran varios métodos basados en conocimientos previos:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
Por supuesto, los métodos anteriores no están limitados, y también hay expresiones principales, expresiones secundarias, expresiones primarias secundarias y expresiones de hermanos secundarios, etc.Aquí entenderemos brevemente los más utilizados.representación del hermano menor
Un árbol binario es un conjunto finito de nodos. Este conjunto puede tener dos situaciones:
De la figura se pueden sacar dos conclusiones.:
No hay ningún nodo con grado mayor que 2 en un árbol binario
Los subárboles de un árbol binario se pueden dividir en subárboles izquierdo y derecho y el orden no se puede invertir, por lo que el árbol binario es un árbol ordenado.
Aviso: Para cualquier árbol binario, se compone de las siguientes situaciones (La situación del árbol vacío es más fácil de olvidar)
Para resumir brevemente:
Cada nivel de un árbol binario completo está lleno.
Si la altura de un árbol binario completo es n, entonces los primeros n-1 niveles están llenos, pero el último nivel puede no estar lleno.Pero debe ser continuo de izquierda a derecha.
Un árbol binario completo es una estructura de datos muy eficiente y un árbol binario completo es un tipo especial de árbol binario completo.
Un árbol binario completo es una condición necesaria y suficiente para un árbol binario completo.
Este es un árbol binario ordinario, que no es continuo de izquierda a derecha.
Los árboles binarios generalmente se pueden almacenar en dos estructuras, una es una estructura secuencial y la otra es una estructura en cadena.
El almacenamiento de estructura secuencial consiste en utilizar matrices para almacenar,Generalmente, las matrices sólo son adecuadas para representar árboles binarios completos. , porque si el árbol binario no está lleno, se desperdiciará espacio. En realidad, solo el montón utilizará matrices para el almacenamiento. El almacenamiento secuencial de árboles binarios es físicamente una matriz y lógicamente un árbol binario. Para resolver la siguiente pregunta, necesitamos usar la combinación de una matriz física y un árbol binario lógicamente para resolver una pregunta.
leftchild = parent * 2 + 1;
rightchild = paretn * 2 +2;
parent = (child - 1) / 2;
(No diferencia entre niños de izquierda y derecha)
En cuanto al tercer punto, basado en razonamientos personales,leftchild
El subíndice se divide enleftchild- 1
y1
,paraleftchild-1
paraparent
subíndice dos veces, para(child - 1) / 2
El operadorleftchild
Sácalo como1
Parcialmente dividido por 2, el número entero es 0,leftchild -1
Parte de esto puede verse comoleftchild
,yrightchild与leftchild相差1
,porquerightchild = leftchild - 1
y por arribaleftchild - 1 ~= leftchild
, se puede inferir querightchild = leftchild(在进行/2运算,取整数情况下)
La estructura de almacenamiento vinculada de un árbol binario significa que se utiliza una lista vinculada para representar un árbol binario, es decir, una cadena para indicar la relación lógica de los elementos. El método habitual es que cada nodo en la lista vinculada consta de tres campos, el campo de datos y los campos de puntero izquierdo y derecho. Los punteros izquierdo y derecho se utilizan para proporcionar las direcciones de almacenamiento de los puntos de enlace donde están el hijo izquierdo y el hijo derecho. del nodo se ubican respectivamente.Las estructuras de cadena se dividen en cadenas binarias y cadenas trifurcadas. En la actualidad, generalmente usamos cadenas binarias en nuestros estudios. Más adelante, cuando aprendamos estructuras de datos de alto orden, como los árboles rojo-negro, se utilizarán cadenas trifurcadas.
typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pParent; // 指向当前节点的双亲
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
};
El almacenamiento de estructura secuencial se almacena a través de matrices.Generalmente, las matrices solo son adecuadas para árboles binarios completos. Los árboles binarios incompletos no son adecuados para el almacenamiento de estructuras de matrices. Los árboles binarios ordinarios solo son adecuados para el almacenamiento de estructuras en cadena. . Pero en realidad, las matrices solo se usan para almacenamiento cuando se usan montones, y la mayoría de ellos se almacenan a través de estructuras en cadena.
la razón es:
Lo anterior es todo el contenido de este artículo. ¡Gracias a todos por leer! Aquí están las notas de Dian Xiaoer sobre estructuras de datos elementales. ¡Espero que le resulten útiles para aprender estructuras de datos elementales!