Обхід поштового замовлення визначається як вид обхід дерева який дотримується політики лівого-правого кореня таким чином, що для кожного вузла:
- Першим проходить ліве піддерево
- Потім виконується обхід правого піддерева
- Нарешті, здійснюється обхід кореневого вузла піддерева

Обхід поштового замовлення
Алгоритм постпорядкового обходу бінарного дерева:
Алгоритм обходу після замовлення показаний таким чином:
Поштовий переказ (корінець):
- Виконуйте кроки 2-4, доки root не стане != NULL
- Postorder (корінь -> ліворуч)
- Postorder (корінь -> праворуч)
- Записати корінь -> дані
- Кінцева петля
Як працює Postorder Traversal бінарного дерева?
Розглянемо таке дерево:

Приклад бінарного дерева
Якщо ми виконуємо обхід після порядку в цьому бінарному дереві, то обхід буде таким:
Крок 1: Обхід проходитиме від 1 до його лівого піддерева, тобто 2, потім від 2 до його лівого кореня піддерева, тобто 4. Тепер 4 не має піддерева, тому його відвідуватимуть.
Вузол 4 відвідується
крок 2: Оскільки ліве піддерево 2 відвідано повністю, тепер воно перетинатиме праве піддерево 2, тобто воно переміститься до 5. Оскільки піддерева 5 немає, його буде відвідано.
Вузол 5 відвідується
крок 3: Тепер відвідуються як ліве, так і праве піддерева вузла 2. Тож тепер відвідайте сам вузол 2.
Відвідується вузол 2
крок 4: Під час обходу лівого піддерева вузла 1 він тепер переміститься до кореня правого піддерева, тобто 3. Вузол 3 не має жодного лівого піддерева, тому він обійде праве піддерево, тобто 6. Вузол 6 не має піддерева і тому його відвідують.
Вузол 6 відвідується
arraylist відсортований javaкрок 5: Усі піддерева вузла 3 обходяться. Отже, зараз відвідано вузол 3.
Відвідується вузол 3
js onclickКрок 6: Оскільки пройдено всі піддерева вузла 1, тепер настав час для відвідування вузла 1, після чого обхід завершується, оскільки пройдено все дерево.
Відвідується все дерево
Отже, порядок обходу вузлів такий 4 -> 5 -> 2 -> 6 -> 3 -> 1 .
Програма для впровадження Postorder Traversal бінарного дерева
Нижче наведено реалізацію коду обходу після замовлення:
C++
// C++ program for postorder 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 postorder traversal> void> printPostorder(>struct> Node* node)> {> >if> (node == NULL)> >return>;> >// First recur on left subtree> >printPostorder(node->ліворуч);> >// Then recur on right subtree> >printPostorder(node->правильно);> >// Now deal with the node> >cout ' '; } // Driver code int main() { struct Node* root = new Node(1); root->зліва = новий вузол (2); root->right = новий вузол (3); root->left->left = новий вузол(4); root->left->right = новий вузол(5); root->right->right = новий вузол (6); // Виклик функції cout<< 'Postorder traversal of binary tree is:
'; printPostorder(root); return 0; }> |
>
>
Java
// Java program for postorder traversals> import> java.util.*;> // Structure of a Binary Tree Node> class> Node {> >int> data;> >Node left, right;> >Node(>int> v)> >{> >data = v;> >left = right =>null>;> >}> }> class> GFG {> > >// Function to print postorder traversal> >static> void> printPostorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >System.out.print(node.data +>' '>);> >}> >// Driver code> >public> static> void> main(String[] args)> >{> >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> >System.out.println(>'Postorder traversal of binary tree is: '>);> >printPostorder(root);> >}> }> // This code is contributed by prasad264> |
таблиця істинності повного суматора
>
>
Python3
# Python program for postorder 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 postorder traversal> def> printPostorder(node):> >if> node>=>=> None>:> >return> ># First recur on left subtree> >printPostorder(node.left)> ># Then recur on right subtree> >printPostorder(node.right)> ># Now deal with the node> >print>(node.data, end>=>' '>)> # 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>(>'Postorder traversal of binary tree is:'>)> >printPostorder(root)> |
>
>
C#
// C# program for postorder 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>;> >}> }> public> class> GFG {> >// Function to print postorder traversal> >static> void> printPostorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >Console.Write(node.data +>' '>);> >}> >static> public> void> Main()> >{> >// Code> >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(> >'Postorder traversal of binary tree is: '>);> >printPostorder(root);> >}> }> // This code is contributed by karthik.> |
видалити останній символ із рядка
>
>
Javascript
сортування вибору java
// Structure of a Binary Tree Node> class Node {> >constructor(v) {> >this>.data = v;> >this>.left =>null>;> >this>.right =>null>;> >}> }> // Function to print postorder traversal> function> printPostorder(node) {> >if> (node ==>null>) {> >return>;> >}> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >console.log(node.data +>' '>);> }> // Driver code> function> main() {> >let 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(>'Postorder traversal of binary tree is:
'>);> >printPostorder(root);> }> main();> |
>
>Вихід
Postorder traversal of binary tree is: 4 5 2 6 3 1>
Пояснення:

Як працює обхід замовлень поштою
Аналіз складності:
Часова складність: O(N), де N - загальна кількість вузлів. Тому що він проходить усі вузли принаймні один раз.
Допоміжний простір: O(1), якщо простір стеку рекурсії не розглядається. В іншому випадку O(h), де h — висота дерева
- У гіршому випадку ч може бути таким же, як Н (коли дерево перекошене)
- У кращому випадку ч може бути таким же, як спокійний (коли дерево є повним деревом)
Випадки використання Postorder Traversal:
Нижче наведено деякі випадки використання обходу після замовлення:
- Це використовується для видалення дерева.
- Також корисно отримати постфіксний вираз із дерева виразів.
Пов'язані статті:
- Типи обходу дерев
- Ітеративний обхід постпорядку (з використанням двох стеків)
- Ітеративний обхід після замовлення (з використанням одного стека)
- Постпорядок бінарного дерева без рекурсії та без стека
- Знайдіть обхід BST після замовлення з обходу попереднього замовлення
- Обхід Морріса для замовлення поштою
- Друк обходу після замовлення з попереднього замовлення та обходу в порядку




