Preorder Traversal of Binary Tree
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:
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