logo

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

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):

  1. Postupujte podľa krokov 2 až 4, kým root != NULL
  2. Napíšte root -> údaje
  3. Predobjednávka (root -> vľavo)
  4. Predobjednávka (root -> vpravo)
  5. Koniec slučky

Ako funguje Preorder Traversal of Binary Tree?

Zvážte nasledujúci strom:

Príklad binárneho stromu

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ý

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ý

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ý

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ý

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ý

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

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

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