Prechod predobjednávky je definovaný ako typ prechod cez strom ktorá sa riadi zásadou Root-Left-Right, kde:
- Ako prvý sa navštívi koreňový uzol podstromu.
- Potom sa prejde ľavý podstrom.
- Nakoniec sa prejde správny podstrom.

Prechod predobjednávky
Algoritmus pre prechod predobjednávky binárneho stromu
Algoritmus na prechod predobjednávky je znázornený takto:
obsahuje podreťazec java
Predobjednávka (root):
- Postupujte podľa krokov 2 až 4, kým root != NULL
- Napíšte root -> údaje
- Predobjednávka (root -> vľavo)
- Predobjednávka (root -> vpravo)
- Koniec slučky
Ako funguje Preorder Traversal of Binary Tree?
Zvážte nasledujúci strom:

Príklad binárneho stromu
Ak vykonáme prechod predobjednávky v tomto binárnom strome, prechod bude nasledujúci:
Krok 1: Najprv sa navštívi koreň, t.j. uzol 1.
Uzol 1 je navštívený
Krok 2: Potom prejdite v ľavom podstrome. Teraz je navštívený koreň ľavého podstromu, t. j. je navštívený uzol 2.
Uzol 2 je navštívený
Krok 3: Opäť sa prejde ľavý podstrom uzla 2 a navštívi sa koreň tohto podstromu, t. j. uzol 4.
Uzol 4 je navštívený
Krok 4: Neexistuje žiadny podstrom 4 a je navštívený ľavý podstrom uzla 2. Takže teraz sa prejde pravý podstrom uzla 2 a navštívi sa koreň tohto podstromu, t. j. uzol 5.
Uzol 5 je navštívený
Krok 5: Navštívi sa ľavý podstrom uzla 1. Takže teraz sa prejde pravý podstrom uzla 1 a navštívi sa koreňový uzol, t. j. uzol 3.
Uzol 3 je navštívený
Krok 6: Uzol 3 nemá žiadny ľavý podstrom. Takže sa prejde pravý podstrom a navštívi sa koreň podstromu, t. j. uzol 6. Potom už neexistuje žiadny uzol, ktorý by ešte nebol prejdený. Prechádzanie sa teda končí.
Navštívený je kompletný strom
Takže poradie prechodu uzlov je 1 -> 2 -> 4 -> 5 -> 3 -> 6 .
Program na implementáciu prechodu predobjednávky binárneho stromu
Nižšie je uvedená implementácia kódu prechodu predobjedná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->údajov<< ' '; // Recur on left subtree printPreorder(node->vľavo); // Opakuje sa v pravom podstrome printPreorder(node->right); } // Kód ovládača int main() { struct 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); // Volanie funkcie cout<< 'Preorder traversal of binary tree is:
'; printPreorder(root); return 0; }> Java // 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ýkon
Preorder traversal of binary tree is: 1 2 4 5 3 6>
Vysvetlenie:

Ako funguje prechod predobjednávky
Analýza zložitosti:
Časová zložitosť: O(N), kde N je celkový počet uzlov. Pretože aspoň raz prejde cez všetky uzly.
Pomocný priestor:
- O(1) ak sa neberie do úvahy priestor zásobníka rekurzie.
- Inak, O(h) kde h je výška stromu
- V najhoršom prípade h môže byť rovnaký ako N (keď je strom skosený strom)
- V najlepšom prípade h môže byť rovnaký ako pokojne (keď je strom úplný strom)
Prípady použitia prechodu predobjednávky:
Niektoré prípady použitia prechodu predobjednávky sú:
- Toto sa často používa na vytvorenie kópie stromu.
- Je tiež užitočné získať predponový výraz zo stromu výrazov.
Súvisiace články:
- Typy prechodu stromov
- Iteratívne prechádzanie predobjednávky
- Skontrolujte, či dané pole môže predstavovať prechod BST predobjednávkou
- Preorder from inorder and postorder traversals
- Nájdite n-tý uzol v predobjednávkovom prechode binárneho stromu
- Predobjednávkový prechod N-árneho stromu




