using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Binary_search_tree
{
class Node //كلاس العقدة
{
int data;
Node left;
Node right;
public int Data
{
set { data = value; }
get { return data; }
}
public Node Left
{
set { left = value; }
get { return left; }
}
public Node Right
{
set { right = value; }
get { return right; }
}
}
class Binary_Search_Tree //كلاس الشجرة الثنائية
{
Node root;
public Node Root
{
get { return root; }
}
public void Insert(int x) //ميثود إضافة قيمة
{
Node temp = new Node();
temp.Data = x;
if (root == null) //إذا الشجرة فارغة
root = temp;
else //الشجرة ملانة
{
Node cur = new Node();
cur = root;
while (true)
{
if (x > cur.Data) //إذا القيمة المدخلة أكبر من قيمة العقدة الحالية
{
if (cur.Right == null)
{
cur.Right = temp;
break;
}
cur = cur.Right;
}
else //إذا القيمة المدخلة أصغر من قيمة العقدة الحالية
{
if (cur.Left == null)
{
cur.Left = temp;
break;
}
cur = cur.Left;
}
}
}
}
public void Print_Inorder(Node root) //ميثود طباعة بشكل نظامي مرتب تصاعدي
{
if (root != null)
{
Print_Inorder(root.Left);
Console.Write(root.Data + " ");
Print_Inorder(root.Right);
}
//else
// Console.WriteLine("The The Binary Tree is empty now :)");
}
public void Print_preorder(Node root) // left right ميثود طباعة حسب التريتب أو حسب النظام
{
if (root != null)
{
Console.Write(root.Data + " ");
Print_preorder(root.Left);
Print_preorder(root.Right);
}
//else
// Console.WriteLine("The The Binary Tree is empty now :)");
}
public void Print_Postorder(Node root) //طباعة الأبناء ثم طباعة الأب
{
if (root != null)
{
Print_Postorder(root.Left);
Print_Postorder(root.Right);
Console.Write(root.Data+" ");
}
}
public int Find_Max() //ميثود إعطاء أكبر قيمة
{
Node cur = root;
if (root == null)
return -1;
while (cur.Right != null)
cur = cur.Right;
return cur.Data;
}
public int Find_Min() //ميثود إعطاء أصغر قيمة
{
Node cur = new Node();
cur = root;
if (root == null)
return -1;
while (cur.Left != null)
cur = cur.Left;
return cur.Data;
}
public Node Find(int num) //ميثود
{
if (root == null)
return null;
Node cur = new Node();
cur = root;
while (num != cur.Data)
{
if (num > cur.Data)
cur = cur.Right;
else
cur = cur.Left;
if (cur == null)
return null;
}
return cur;
}
public void Delete()
{
}
public override string ToString()
{
return (root.Data.ToString());
}
}
class Program
{
static void Main(string[] args)
{
Binary_Search_Tree tree = new Binary_Search_Tree();
//Node root=new Node();
http://root.Data=4; tree.Insert(4);
tree.Insert(2); tree.Insert(1); tree.Insert(3);
tree.Insert(5); tree.Insert(4);
tree.Insert(6); tree.Insert(5); tree.Insert(10);
tree.Print_Inorder(tree.Root);
Console.WriteLine();
tree.Print_preorder(tree.Root);
Console.WriteLine();
tree.Print_Postorder(tree.Root);
Console.WriteLine();
Console.WriteLine(tree.Find_Max());
Console.WriteLine(tree.Find_Min());
Node result = tree.Find(5);
Node result2 = tree.Find(12);
Console.WriteLine(result);
Console.WriteLine(result2);
}
}
}