Išankstinis pervažiavimas apibrėžiamas kaip tipas medžio perėjimas kuri atitinka šaknų-kairės-dešinės politikos, kur:
tcp ip modelis
- Pirmiausia aplankomas pomedžio šakninis mazgas.
- Tada perkeliamas kairysis pomedis.
- Pagaliau pervažiuojamas dešinysis pomedis.

Išankstinis pervažiavimas
Dvejetainio medžio išankstinio užsakymo judėjimo algoritmas
Išankstinio užsakymo judėjimo algoritmas parodytas taip:
Išankstinis užsakymas (root):
- Atlikite 2–4 veiksmus, kol šaknis != NULL
- Rašyti root -> data
- Išankstinis užsakymas (root -> left)
- Išankstinis užsakymas (root -> dešinėn)
- Pabaigos kilpa
Kaip veikia dvejetainio medžio išankstinis užsakymas?
Apsvarstykite šį medį:

Dvejetainio medžio pavyzdys
Jei šiame dvejetainiame medyje atliksime išankstinio užsakymo perėjimą, tada perėjimas bus toks:
1 žingsnis: Iš pradžių bus aplankyta šaknis, t. y. 1 mazgas.
Aplankytas 1 mazgas
2 žingsnis: Po to pereikite kairiuoju pomedžiu. Dabar aplankoma kairiojo pomedžio šaknis, t. y. aplankomas 2 mazgas.
Aplankytas 2 mazgas
java nuorodų sąrašas3 veiksmas: Vėl kertamas kairysis 2 mazgo pomedis ir aplankoma to pomedžio šaknis, ty 4 mazgas.
Aplankytas 4 mazgas
4 veiksmas: Nėra 4 pomedžio, o lankomas kairysis mazgo 2 pomedis. Taigi dabar bus perkeltas dešinysis 2 mazgo pomedis ir bus aplankyta to pomedžio šaknis, ty 5 mazgas.
Aplankytas 5 mazgas
5 veiksmas: Lankomas kairysis 1 mazgo pomedis. Taigi dabar bus perkeltas dešinysis 1 mazgo pomedis ir aplankytas šakninis mazgas, ty mazgas 3.
eilutė javaAplankytas 3 mazgas
6 veiksmas: 3 mazgas neturi kairiojo pomedžio. Taigi bus perkeltas dešinysis pomedis ir aplankyta pomedžio šaknis, ty 6 mazgas. Po to nėra mazgo, kuris dar nebūtų pereitas. Taigi kelionė baigiasi.
Aplankytas visas medis
Taigi mazgų perėjimo tvarka yra 1 -> 2 -> 4 -> 5 -> 3 -> 6 .
hashset vs hashmap
Programa, skirta įgyvendinti dvejetainio medžio išankstinį užsakymą
Toliau pateikiamas išankstinio užsakymo kodo įgyvendinimas:
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->duomenis<< ' '; // Recur on left subtree printPreorder(node->kairėje); // Pasikartoti dešiniajame pomedyje printPreorder(mazgas->dešinė); } // Tvarkyklės kodas int main() { struct Node* root = new Node(1); root->left = naujas mazgas (2); root->right = naujas mazgas (3); šaknis->kairė->kairė = naujas mazgas(4); šaknis->kairė->dešinė = naujas mazgas(5); root->right->right = naujas mazgas (6); // Funkcijos iškvietimas<< '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();> Išvestis
Preorder traversal of binary tree is: 1 2 4 5 3 6>
Paaiškinimas:

Kaip veikia išankstinio užsakymo perkėlimas
Sudėtingumo analizė:
Laiko sudėtingumas: O(N) čia N yra bendras mazgų skaičius. Nes jis bent kartą kerta visus mazgus.
Pagalbinė erdvė:
- O(1) jei neatsižvelgiama į rekursijos kamino erdvę.
- Priešingu atveju, Oi) kur h yra medžio aukštis
- Blogiausiu atveju, h gali būti toks pat kaip N (kai medis yra pasviręs)
- Geriausiu atveju, h gali būti toks pat kaip Ramus (kai medis yra pilnas medis)
Išankstinio užsakymo naudojimo atvejai:
Kai kurie išankstinio užsakymo naudojimo atvejai yra šie:
- Tai dažnai naudojama kuriant medžio kopiją.
- Taip pat naudinga gauti priešdėlio išraišką iš išraiškų medžio.
Susiję straipsniai:
- Medžių kirtimo tipai
- Iteratyvus išankstinis užsakymas
- Patikrinkite, ar nurodytas masyvas gali reikšti išankstinį BST perėjimą
- Išankstinis užsakymas iš inorder ir postorder traversals
- Suraskite n-ąjį mazgą dvejetainio medžio išankstiniame užsakyme
- Išankstinis užsakymas pervažiuoti N-aries medį




