minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este artigo começará com os conceitos relacionados a árvores e árvores binárias para nos ajudar a aprender mais sobre árvores binárias.
🌈个人主页:É o garçom
🌈C语言笔记专栏:Notas da linguagem C
🌈C++笔记专栏: Notas C++
🌈初阶数据结构笔记专栏: Notas elementares sobre estrutura de dados
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
Árvore é uma estrutura de dados não linear, composta porn(n>=0)
Nós limitados formam um conjunto com relacionamento hierárquico Porém, a árvore tem pouco valor na prática, mas a árvore binária tem maior valor prático (o motivo pelo qual esse conjunto é chamado de árvore é que ele tem a raiz voltada para cima e as folhas. voltado para baixo. Parece muito com uma árvore)
M(M>0)
conjuntos disjuntosT1、T2、....、Tm
, cada conjunto dos quaisTi(1<=i<=m)
É outra subárvore com estrutura semelhante à de uma árvore. O nó raiz de cada subárvore possui um e apenas um predecessor e pode ter 0 ou mais sucessores.Como a estrutura em árvore é mais complexa que a tabela linear, o método de armazenamento é mais complicado. É necessário salvar tanto o intervalo de valores quanto o relacionamento entre os nós.
Aqui estão vários métodos baseados em conhecimentos prévios:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
Claro, os métodos acima não são limitados, e também existem expressões pai, expressões filho, expressões pai filho e expressões irmão filho, etc.Aqui entenderemos brevemente os mais comumente usadosrepresentação do irmão menor
Uma árvore binária é um conjunto finito de nós. Este conjunto pode ter duas situações:
Duas conclusões podem ser tiradas da figura:
Não existe nenhum nó com grau maior que 2 em uma árvore binária
As subárvores de uma árvore binária podem ser divididas em subárvores esquerda e direita, e a ordem não pode ser invertida, portanto a árvore binária é uma árvore ordenada.
Perceber: Para qualquer árvore binária, ela é composta pelas seguintes situações (A situação da árvore vazia é mais fácil de esquecer)
Para resumir brevemente:
Cada nível de uma árvore binária completa está cheio
Se a altura de uma árvore binária completa for n, então os primeiros n-1 níveis estão cheios, mas o último nível pode não estar cheio.Mas deve ser contínuo da esquerda para a direita
Uma árvore binária completa é uma estrutura de dados muito eficiente, e uma árvore binária completa é um tipo especial de árvore binária completa.
Uma árvore binária completa é uma condição necessária e suficiente para uma árvore binária completa
Esta é uma árvore binária comum, que não é contínua da esquerda para a direita.
As árvores binárias geralmente podem ser armazenadas em duas estruturas, uma é uma estrutura sequencial e a outra é uma estrutura em cadeia.
O armazenamento de estrutura sequencial consiste em usar arrays para armazenar,Geralmente, os arrays são adequados apenas para representar árvores binárias completas. , porque se a árvore binária não estiver cheia, haverá desperdício de espaço. Na realidade, apenas o heap usará arrays para armazenamento. O armazenamento sequencial de árvores binárias é fisicamente um array e logicamente uma árvore binária. Para resolver a próxima questão, precisamos usar a combinação de fisicamente um array e logicamente uma árvore binária para resolver uma questão.
leftchild = parent * 2 + 1;
rightchild = paretn * 2 +2;
parent = (child - 1) / 2;
(Não diferencia entre filhos da esquerda e da direita)
Em relação ao terceiro ponto, com base no raciocínio pessoal,leftchild
O subscrito é dividido emleftchild- 1
e1
,paraleftchild-1
paraparent
subscrito duas vezes, para(child - 1) / 2
O operador iráleftchild
Retire como1
Parcialmente dividido por 2, o número inteiro é 0,leftchild -1
Parte disso pode ser vista comoleftchild
,erightchild与leftchild相差1
,porquerightchild = leftchild - 1
e através de cimaleftchild - 1 ~= leftchild
, pode-se inferir querightchild = leftchild(在进行/2运算,取整数情况下)
A estrutura de armazenamento vinculada de uma árvore binária significa que uma lista vinculada é usada para representar uma árvore binária, ou seja, uma cadeia é usada para indicar o relacionamento lógico dos elementos. O método usual é que cada nó na lista vinculada consiste em três campos, o campo de dados e os campos de ponteiro esquerdo e direito. Os ponteiros esquerdo e direito são usados para fornecer os endereços de armazenamento do link aponta onde o filho esquerdo e o filho direito. do nó estão localizados respectivamente.As estruturas de cadeia são divididas em cadeias binárias e cadeias trifurcadas. Atualmente, geralmente usamos cadeias binárias em nossos estudos. Mais tarde, quando aprendermos estruturas de dados de alta ordem, como árvores vermelhas e pretas, serão usadas cadeias 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; // 当前节点值域
};
O armazenamento de estrutura sequencial é armazenado por meio de arrays.Geralmente, os arrays são adequados apenas para árvores binárias completas. Árvores binárias não completas não são adequadas para armazenamento de estruturas de array. . Mas, na realidade, os arrays são usados para armazenamento apenas quando heaps são usados, e a maioria deles é armazenada por meio de estruturas em cadeia.
a razão é:
O texto acima é todo o conteúdo deste artigo. Obrigado a todos pela leitura! Aqui estão as notas de Dian Xiaoer sobre estruturas de dados elementares. Espero que sejam úteis para você no aprendizado de estruturas de dados elementares!