logo

Forudbestil gennemkørsel af binært træ

Forudbestil gennemløb er defineret som en type trægennemgang der følger rod-venstre-højre-politikken, hvor:

  • Undertræets rodknude besøges først.
  • Derefter krydses det venstre undertræ.
  • Til sidst krydses det højre undertræ.
Forudbestil gennemløb

Forudbestil gennemløb



Algoritme for Preorder Traversal af binært træ

Algoritmen for forudbestillingsgennemgang er vist som følger:

Forudbestilling (rod):

hvordan man ændrer streng til int
  1. Følg trin 2 til 4 indtil root != NULL
  2. Skriv root -> data
  3. Forudbestil (rod -> venstre)
  4. Forudbestil (rod -> højre)
  5. Slut sløjfe

Hvordan fungerer Preorder Traversal of Binary Tree?

Overvej følgende træ:



Eksempel på binært træ

Eksempel på binært træ

Hvis vi udfører en forudbestillingsgennemgang i dette binære træ, vil gennemgangen være som følger:

Trin 1: Først vil roden blive besøgt, dvs. node 1.



Node 1 er besøgt

Node 1 er besøgt

Trin 2: Efter dette, kryds i venstre undertræ. Nu er roden af ​​det venstre undertræ besøgt, dvs. node 2 er besøgt.

Node 2 er besøgt

Node 2 er besøgt

Trin 3: Igen krydses det venstre undertræ af knude 2, og roden af ​​det undertræ, dvs. knude 4 besøges.

Node 4 er besøgt

Node 4 er besøgt

Trin 4: Der er ikke noget undertræ af 4, og det venstre undertræ af knude 2 besøges. Så nu vil det højre undertræ af node 2 blive krydset, og roden af ​​det undertræ, dvs. node 5 vil blive besøgt.

Node 5 er besøgt

Node 5 er besøgt

Trin 5: Det venstre undertræ af node 1 besøges. Så nu vil det højre undertræ af node 1 blive krydset, og rodknuden, dvs. node 3 besøges.

Node 3 er besøgt

Node 3 er besøgt

Trin 6: Node 3 har intet venstre undertræ. Så det højre undertræ vil blive krydset, og roden af ​​undertræet, dvs. node 6 vil blive besøgt. Derefter er der ingen node, der endnu ikke er gennemkørt. Så gennemløbet slutter.

Hele træet er besøgt

Hele træet er besøgt

Så rækkefølgen af ​​krydsning af noder er 1 -> 2 -> 4 -> 5 -> 3 -> 6 .

java samling

Program til at implementere Preorder Traversal af binært træ

Nedenfor er kodeimplementeringen af ​​forudbestillingsgennemgangen:

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->venstre);  // Gentag på højre undertræ printPreorder(node->right); } // Driverkode int main() { struct Node* root = new Node(1);  root->venstre = ny node(2);  root->right = ny node(3);  root->venstre->venstre = ny node(4);  root->venstre->højre = ny node(5);  root->right->right = new Node(6);  // Funktionskald 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();>

Produktion
Preorder traversal of binary tree is: 1 2 4 5 3 6>

Forklaring:

Sådan fungerer preorder traversal

Sådan fungerer preorder traversal

Kompleksitetsanalyse:

Tidskompleksitet: O(N) hvor N er det samlede antal knudepunkter. Fordi den krydser alle noderne mindst én gang.
Hjælpeplads:

  • O(1) hvis der ikke tages hensyn til rekursionsstabelplads.
  • Ellers, O(h) hvor h er træets højde
  • I værste fald, h kan være det samme som N (når træet er et skævt træ)
  • I bedste tilfælde, h kan være det samme som berolige (når træet er et komplet træ)

Brugstilfælde af Preorder Traversal:

Nogle brugstilfælde af gennemkørsel af forudbestilling er:

  • Dette bruges ofte til at lave en kopi af et træ.
  • Det er også nyttigt at få præfiksudtrykket fra et udtrykstræ.

Relaterede artikler:

  • Typer af trægennemgang
  • Iterativ forudbestillingsgennemgang
  • Tjek, om et givet array kan repræsentere forudbestillingsgennemgang af BST
  • Forudbestil fra inorder og postorder traversals
  • Find n'te knude i forudbestillingsgennemgang af et binært træ
  • Forudbestil gennemløb af et N-ært træ