Přechod předobjednávky je definován jako typ projíždění stromů která se řídí zásadou Root-Left-Right, kde:
- Jako první je navštíven kořenový uzel podstromu.
- Poté se projde levý podstrom.
- Konečně se projde pravý podstrom.

Přechod předobjednávky
Algoritmus pro předobjednávkový průchod binárního stromu
Algoritmus pro předobjednávku je zobrazen následovně:
Předobjednávka (kořen):
binární vyhledávací python
- Postupujte podle kroků 2 až 4, dokud root != NULL
- Zápis root -> data
- Předobjednávka (kořen -> vlevo)
- Předobjednávka (kořen -> vpravo)
- Konec smyčky
Jak funguje Preorder Traversal of Binary Tree?
Zvažte následující strom:

Příklad binárního stromu
Pokud v tomto binárním stromu provedeme průchod předobjednávkou, pak bude průchod následující:
Krok 1: Nejprve bude navštíven kořen, tj. uzel 1.
jak zjistit, zda vás někdo zablokoval na AndroiduUzel 1 je navštíven
Krok 2: Poté přejděte do levého podstromu. Nyní je navštíven kořen levého podstromu, tj. je navštíven uzel 2.
Uzel 2 je navštíven
Krok 3: Opět se projde levý podstrom uzlu 2 a navštíví se kořen tohoto podstromu, tj. uzel 4.
Uzel 4 je navštíven
nbspKrok 4: Neexistuje žádný podstrom 4 a je navštíven levý podstrom uzlu 2. Nyní tedy bude procházet pravý podstrom uzlu 2 a bude navštíven kořen tohoto podstromu, tj. uzel 5.
Uzel 5 je navštíven
Krok 5: Je navštíven levý podstrom uzlu 1. Nyní se tedy projde pravý podstrom uzlu 1 a navštíví se kořenový uzel, tj. uzel 3.
Uzel 3 je navštíven
Krok 6: Uzel 3 nemá žádný levý podstrom. Takže se projde pravý podstrom a navštíví se kořen podstromu, tj. uzel 6. Poté již neexistuje žádný uzel, který by ještě nebyl projetý. Takže procházení končí.
Celý strom je navštíven
Takže pořadí procházení uzlů je 1 -> 2 -> 4 -> 5 -> 3 -> 6 .
Program pro implementaci předobjednávkového procházení binárního stromu
Níže je uvedena implementace kódu pro přechod předobjednávky:
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->data<< ' '; // Recur on left subtree printPreorder(node->vlevo, odjet); // Opakuje se na pravém podstromu printPreorder(node->right); } // Kód ovladače int main() { struct Uzel* 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); // Volání funkce cout<< 'Preorder traversal of binary tree is:
'; printPreorder(root); return 0; }> Jáva // 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();> Výstup
Preorder traversal of binary tree is: 1 2 4 5 3 6>
Vysvětlení:

Jak funguje procházení předobjednávky
výběr řazení java
Analýza složitosti:
Časová náročnost: O(N) kde N je celkový počet uzlů. Protože alespoň jednou projde všemi uzly.
Pomocný prostor:
- O(1) pokud není uvažován žádný rekurzní zásobníkový prostor.
- V opačném případě, Ach) kde h je výška stromu
- V nejhorším případě h může být stejný jako N (když je strom zkosený strom)
- V nejlepším případě, h může být stejný jako uklidnit (když je strom úplný strom)
Případy použití předobjednávky Traversal:
Některé případy použití předobjednávky jsou:
- To se často používá pro vytvoření kopie stromu.
- Je také užitečné získat předponový výraz ze stromu výrazů.
Související články:
- Typy procházení stromů
- Iterativní procházení předobjednávky
- Zkontrolujte, zda dané pole může představovat průchod BST předobjednávkou
- Preorder from inorder a postorder traversals
- Najděte n-tý uzel v předobjednávkovém procházení binárního stromu
- Předobjednávka procházení N-árního stromu




