Método 1:
Condições aplicáveis deste método:
1. Quando atravessamos a árvore, precisamos apenas encontrar o nó filho do nó pai e não precisamos encontrar o nó pai a partir do nó filho.
2. A árvore construída é uma árvore binária
Código de implementação:
class Tree{
int value;//代表该点的权值
int left_son;//左儿子编号
int right_son;//右儿子编号
int leftSide_value;//连接左儿子的边的权值
int rightSide_value;//连接右儿子边的权值
}
Insira de acordo com a descrição do título. Por
exemplo, insira o número do nó, peso do nó, número do filho esquerdo, número do filho direito e o peso da aresta conectando o filho esquerdo ao peso da aresta filho direito.
for(int i=1;i<=n;i++)//n代表节点的个数
{
num=sc.nextInt();
tree[num].value=sc.nextInt();
tree[num].left_son=sc.nextInt();
.......
}
Método 2:
Condições aplicáveis deste método:
1. Quando atravessamos a árvore, precisamos apenas encontrar o nó filho do nó pai e não precisamos encontrar o nó pai a partir do nó filho.
2. Este método compensa uma das deficiências do método 1. O método um é adequado para árvores binárias, não para árvores com vários nós filhos, e este método pode ter vários nós filhos
Código de implementação:
void add(int a, int b){
//表示a为父 b为子
edge[cnt] = b;
ne[cnt] = last[a];
last[a] = cnt++;
}
Acho que ver este código é um pouco tonto. No início, também fiquei. Veja o seguinte processo de pesquisa.
Estamos examinando sua estrutura de armazenamento. Enfileiramos os nós na ordem de entrada. Supondo que exista tal
número da árvore que representa a ordem de entrada, mostramos como o lado direito da árvore está conectado (cnt representa a ordem de entrada e não o número real, a aresta [cnt] é o número real)
Então você pode obter o código da consulta
for(int i=last[a];i>=1;i=ne[i])
Atualizado continuamente!