• Non ci sono risultati.

Visita di alberi binari

N/A
N/A
Protected

Academic year: 2021

Condividi "Visita di alberi binari"

Copied!
3
0
0

Testo completo

(1)

Azzolini Riccardo 2019-03-20

Visita di alberi binari

1 Attraversamento di alberi binari

Un albero binario è costituito da R: la radice;

Sx: il sottoalbero sinistro;

Dx: il sottoalbero destro.

R

Sx Dx

Come qualsiasi albero con radice ordinato, un albero binario può essere attraversato

• in ordine anticipato: R Sx Dx;

• in ordine posticipato: Sx Dx R;

• per livelli (non esprimibile con questa notazione).

Inoltre, per gli alberi binari è definito un altro metodo di attraversamento, chiamato visita simmetrica o in ordine simmetrico (in-order): Sx R Dx;

1.1 Implementazione in Java

public class BinTree<Item> { private Node r;

private class Node { Item item;

Node sx;

Node dx;

}

public boolean isEmpty() {

1

(2)

return r == null;

}

public void visita(int i) { switch (i) {

case 1: preOrder(r); break;

case 2: inOrder(r); break;

case 3: postOrder(r); break;

case 4: levelOrder(r); break;

} }

private void preOrder(Node r) { if (r != null) {

r.visit();

preOrder(r.sx);

preOrder(r.dx);

} }

private void inOrder(Node r) { if (r != null) {

inOrder(r.sx);

r.visit();

inOrder(r.dx);

} }

private void postOrder(Node r) { if (r != null) {

postOrder(r.sx);

postOrder(r.dx);

r.visit();

} }

private void levelOrder(Node r) { Queue<Node> q = new Queue<Node>();

if (r != null) q.enqueue(r);

while (!q.isEmpty()) {

r = q.front(); q.dequeue();

r.visit();

if (r.sx != null) q.enqueue(r.sx);

2

(3)

if (r.dx != null) q.enqueue(r.dx);

} } }

Tutte queste operazioni richiedono tempo Θ(n) e spazio O(n) per un albero con n nodi.

1.2 Esempio

1

2

4

7 5

8

3

6

9

10 11

Visita Ordine

Pre-order 1, 2, 4, 7, 5, 8, 3, 6, 9, 10, 11 In-order 4, 7, 2, 5, 8, 1, 3, 10, 9, 11, 6 Post-order 7, 4, 8, 5, 2, 10, 11, 9, 6, 3, 1 Level-order 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

3

Riferimenti

Documenti correlati

• In un albero binario la profondità di un nodo è la lunghezza del percorso dalla radice al nodo (cioè il numero di archi tra la radice e il nodo). • L’altezza dell’albero

Il ternario bilanciato sembrava avere indubbi vantaggi rispetto al binario, tra cui quello di po- ter rappresentare i numeri negativi senza ricor- rere al segno “meno” anteposto

public static void main(String[] args) {. Rectangle box = new Rectangle(5, 10,

Scrivere un programma che legga da tastiera una sequenza di n interi NON distinti e li inserisca senza duplicati in una tabella hash di dimensione 2n posizioni utilizzando

Scrivere un programma che legga da tastiera una sequenza di N interi di- stinti e li inserisca in un albero binario di ricerca (senza ribilanciamento).. Il programma deve

Dato un albero binario i cui nodi sono colorati di rosso o di nero, progettare un algoritmo efficiente che calcoli il numero di nodi aventi lo stesso numero di discendenti rossi

Gli assi e gli alberi, come sistemi elastici, sotto l’azione di forze variabili nel tempo devono essere analizzati dinamicamente.. Il rischio da evitare è che con eccitazioni

Scrivere una funzione che prende in input un albero binario e restituisce in output una stampa dell’albero in notazione a parentesi, come visto nella prima sezione.. F Scrivere