logo

Preorder Traversal of Binary Tree

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

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
  1. Postupujte podle kroků 2 až 4, dokud root != NULL
  2. Zápis root -> data
  3. Předobjednávka (kořen -> vlevo)
  4. Předobjednávka (kořen -> vpravo)
  5. Konec smyčky

Jak funguje Preorder Traversal of Binary Tree?

Zvažte následující strom:

Příklad binárního stromu

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 Androidu
Uzel 1 je navštíven

Uzel 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

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

Uzel 4 je navštíven

nbsp

Krok 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

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

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

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

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