Attraversamento del preordine è definito come un tipo di attraversamento degli alberi che segue la politica Root-Left-Right dove:
- Il nodo radice del sottoalbero viene visitato per primo.
- Quindi viene attraversato il sottoalbero sinistro.
- Alla fine viene attraversato il sottoalbero destro.

Attraversamento del preordine
matrice di stringhe
Algoritmo per l'attraversamento del preordine dell'albero binario
L'algoritmo per l'attraversamento del preordine è mostrato come segue:
Preordine(radice):
- Seguire i passaggi da 2 a 4 fino a root != NULL
- Scrivi root -> dati
- Preordine (radice -> sinistra)
- Preordine (root -> destra)
- Fine del ciclo
Come funziona l'attraversamento del preordine dell'albero binario?
Consideriamo il seguente albero:

Esempio di albero binario
Se eseguiamo un attraversamento del preordine in questo albero binario, l'attraversamento sarà il seguente:
Passo 1: Inizialmente verrà visitata la root, ovvero il nodo 1.
Il nodo 1 viene visitato
Passo 2: Successivamente, attraversa il sottoalbero di sinistra. Ora viene visitata la radice del sottoalbero sinistro, ovvero viene visitato il nodo 2.
Viene visitato il nodo 2
Passaggio 3: Anche in questo caso viene attraversato il sottoalbero sinistro del nodo 2 e viene visitata la radice di quel sottoalbero, ovvero il nodo 4.
Viene visitato il nodo 4
Passaggio 4: Non esiste un sottoalbero di 4 e viene visitato il sottoalbero sinistro del nodo 2. Quindi ora verrà attraversato il sottoalbero destro del nodo 2 e verrà visitata la radice di quel sottoalbero, ovvero il nodo 5.
Viene visitato il nodo 5
Passaggio 5: Viene visitato il sottoalbero sinistro del nodo 1. Quindi ora verrà attraversato il sottoalbero destro del nodo 1 e verrà visitato il nodo radice, ovvero il nodo 3.
Viene visitato il nodo 3
Passaggio 6: Il nodo 3 non ha un sottoalbero sinistro. Quindi verrà attraversato il sottoalbero destro e verrà visitata la radice del sottoalbero, ovvero il nodo 6. Dopodiché non c'è nodo che non sia ancora stato attraversato. Quindi la traversata finisce.
arraylist nell'ordinamento JavaViene visitato l'albero completo
Quindi l'ordine di attraversamento dei nodi è 1 -> 2 -> 4 -> 5 -> 3 -> 6 .
Programma per implementare l'attraversamento del preordine dell'albero binario
Di seguito è riportata l'implementazione del codice dell'attraversamento del preordine:
C++ // C++ program for preorder traversals #include using namespace std; // Structure of a Binary Tree Node struct Node { int data; struct Node *left, *right; Node(int v) { data = v; left = right = NULL; } }; // Function to print preorder traversal void printPreorder(struct Node* node) { if (node == NULL) return; // Deal with the node cout << node->dati<< ' '; // Recur on left subtree printPreorder(node->Sinistra); // Ricorre sul sottoalbero destro printPreorder(node->right); } // Codice driver int main() { struct Node* root = new Node(1); radice->sinistra = nuovo nodo(2); radice->destra = nuovo nodo(3); radice->sinistra->sinistra = nuovo nodo(4); root->sinistra->destra = nuovo nodo(5); radice->destra->destra = nuovo Nodo(6); // Chiamata di funzione cout<< 'Preorder traversal of binary tree is:
'; printPreorder(root); return 0; }> Giava // Java program for preorder traversals class Node { int data; Node left, right; public Node(int item) { data = item; left = right = null; } } class BinaryTree { Node root; BinaryTree() { root = null; } // Function to print preorder traversal void printPreorder(Node node) { if (node == null) return; // Deal with the node System.out.print(node.data + ' '); // Recur on left subtree printPreorder(node.left); // Recur on right subtree printPreorder(node.right); } // Driver code public static void main(String[] args) { BinaryTree tree = new BinaryTree(); // Constructing the binary tree tree.root = new Node(1); tree.root.left = new Node(2); tree.root.right = new Node(3); tree.root.left.left = new Node(4); tree.root.left.right = new Node(5); tree.root.right.right = new Node(6); // Function call System.out.println('Preorder traversal of binary tree is: '); tree.printPreorder(tree.root); } }> Python3 # Python program for preorder traversals # Structure of a Binary Tree Node class Node: def __init__(self, v): self.data = v self.left = None self.right = None # Function to print preorder traversal def printPreorder(node): if node is None: return # Deal with the node print(node.data, end=' ') # Recur on left subtree printPreorder(node.left) # Recur on right subtree printPreorder(node.right) # Driver code if __name__ == '__main__': root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) root.right.right = Node(6) # Function call print('Preorder traversal of binary tree is:') printPreorder(root)> C# // C# program for preorder traversals using System; // Structure of a Binary Tree Node public class Node { public int data; public Node left, right; public Node(int v) { data = v; left = right = null; } } // Class to print preorder traversal public class BinaryTree { // Function to print preorder traversal public static void printPreorder(Node node) { if (node == null) return; // Deal with the node Console.Write(node.data + ' '); // Recur on left subtree printPreorder(node.left); // Recur on right subtree printPreorder(node.right); } // Driver code public static void Main() { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right = new Node(5); root.right.right = new Node(6); // Function call Console.WriteLine( 'Preorder traversal of binary tree is: '); printPreorder(root); } } // This code is contributed by Susobhan Akhuli> Javascript // Structure of a Binary Tree Node class Node { constructor(v) { this.data = v; this.left = null; this.right = null; } } // Function to print preorder traversal function printPreorder(node) { if (node === null) { return; } // Deal with the node console.log(node.data); // Recur on left subtree printPreorder(node.left); // Recur on right subtree printPreorder(node.right); } // Driver code function main() { const root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right = new Node(5); root.right.right = new Node(6); // Function call console.log('Preorder traversal of binary tree is:'); printPreorder(root); } main();> Produzione
Preorder traversal of binary tree is: 1 2 4 5 3 6>
Spiegazione:

Come funziona l'attraversamento del preordine
Analisi della complessità:
Complessità temporale: O(N) dove N è il numero totale di nodi. Perché attraversa tutti i nodi almeno una volta.
Spazio ausiliario:
- O(1) se non viene considerato lo spazio dello stack di ricorsione.
- Altrimenti, OH) dove h è l'altezza dell'albero
- Nel peggiore dei casi, H può essere lo stesso di N (quando l'albero è un albero inclinato)
- Nel migliore dei casi, H può essere lo stesso di calma (quando l'albero è un albero completo)
Casi d'uso di Preorder Traversal:
Alcuni casi d'uso dell'attraversamento del preordine sono:
- Questo viene spesso utilizzato per creare una copia di un albero.
- È anche utile ottenere l'espressione del prefisso da un albero delle espressioni.
Articoli Correlati:
- Tipi di attraversamento degli alberi
- Attraversamento iterativo del preordine
- Controlla se l'array fornito può rappresentare l'attraversamento del preordine di BST
- Preordine da attraversamenti inordine e postordine
- Trova l'ennesimo nodo nell'attraversamento in preordine di un albero binario
- Attraversamento in preordine di un albero N-ario




