В этой статье мы узнаем: двоичный поиск дерева обхода в C#
Обход Дерева Двоичного Поиска:
Существует три метода обхода, используемые с бинарным деревом поиска: inorder, preorder и postorder.
— Inorder обход посещает все узлы в BST в порядке возрастания значений ключа узла.
— Предварительно упорядоченный обход сначала посещает корневой узел, затем узлы в поддеревьях под левым дочерним элементом корневого узла, а затем узлы в поддеревьях под правым дочерним элементом корневого узла
— Переход после заказа, метод сначала рекурсирует над левыми поддеревьями, а затем над правыми поддеревьями.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BinarySearchTree
{
class Node
{
public int item;
public Node left;
public Node right;
public void display()
{
Console.Write("[");
Console.Write(item);
Console.Write("]");
}
}
class Tree
{
public Node root;
public Tree()
{
root = null;
}
public Node ReturnRoot()
{
return root;
}
public void Insert(int id)
{
Node newNode = new Node();
newNode.item = id;
if (root == null)
root = newNode;
else
{
Node current = root;
Node parent;
while (true)
{
parent = current;
if (id < current.item)
{
current = current.left;
if (current == null)
{
parent.left = newNode;
return;
}
}
else
{
current = current.right;
if (current == null)
{
parent.right = newNode;
return;
}
}
}
}
}
public void Preorder(Node Root)
{
if (Root != null)
{
Console.Write(Root.item + " ");
Preorder(Root.left);
Preorder(Root.right);
}
}
public void Inorder(Node Root)
{
if (Root != null)
{
Inorder(Root.left);
Console.Write(Root.item + " ");
Inorder(Root.right);
}
}
public void Postorder(Node Root)
{
if (Root != null)
{
Postorder(Root.left);
Postorder(Root.right);
Console.Write(Root.item + " ");
}
}
}
class Program
{
static void Main(string[] args)
{
Tree BST = new Tree();
BST.Insert(30);
BST.Insert(35);
BST.Insert(57);
BST.Insert(15);
BST.Insert(63);
BST.Insert(49);
BST.Insert(89);
BST.Insert(77);
BST.Insert(67);
BST.Insert(98);
BST.Insert(91);
Console.WriteLine("Inorder обход : ");
BST.Inorder(BST.ReturnRoot());
Console.WriteLine(" ");
Console.WriteLine();
Console.WriteLine("Preorder обход : ");
BST.Preorder(BST.ReturnRoot());
Console.WriteLine(" ");
Console.WriteLine();
Console.WriteLine("Postorder обход : ");
BST.Postorder(BST.ReturnRoot());
Console.WriteLine(" ");
Console.ReadLine();
}
}
}
Вывод:
Inorder обход :
15 30 35 49 57 63 67 77 89 91 98
Preorder обход :
30 15 35 57 49 63 89 77 67 98 91
Postorder обход :
15 49 67 77 91 98 89 63 57 35 30
