You are on page 1of 11

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM


---o0o---

Môn học: Giải thuật và cấu trúc dữ liệu

BINARY SEARCH TREE

Lớp: Chiều T4 – Tiết 9 – 11

SVTH: Trần Quốc Hùng 20119342

Thành phố Hồ Chí Minh – ngày 27 tháng 4 năm 2023


Tên: Trần Quốc Hùng
MSSV: 20119342

Bài tập viết giao diện binary search tree


Code class binary search tree:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Giaodien_BinaryTree
{
public class Node
{
public int element;
public Node left;
public Node right;

public Node(int e, Node l, Node r)


{
element = e;
left = l;
right = r;
}

class BinarySearchTree
{
public Node root;
public string Array;
public BinarySearchTree()
{
root = null;
}

public Node mainroot(int e)


{
Node n = new Node(e,null,null);
root = n;
return root;
}

public Node broot()


{
return root;
}
public string display()
{
return Array;
}

public void clear()


{
Array = "";
}

public void insert(Node temproot,int e)


{
Node temp = null;
while (temproot != null)
{
temp = temproot;
if (e == temproot.element)
return;
else if (e < temproot.element)
temproot = temproot.left;
else if (e > temproot.element)
temproot = temproot.right;
}
Node n = new Node(e, null, null);
if (root != null)
{
if (e < temp.element)
temp.left = n;
else
temp.right = n;
}
else
root = n;
}

/*
public Node insert(Node troot,int e)
{
if (e < troot.element)
{
troot.left = insert(troot.left, e);
}
else if(e > troot.element)
{
troot.right = insert(troot.right, e);
}
return troot;
}*/

public void preorder(Node troot)


{
if (troot != null)
{
Array = Array + troot.element.ToString() + " ";
preorder(troot.left);
preorder(troot.right);
}
}
public void inorder(Node temproot)
{
if (temproot != null)
{
inorder(temproot.left);
Array = Array + temproot.element.ToString() + " ";
inorder(temproot.right);
}
}

public void postorder(Node troot)


{
if (troot != null)
{
postorder(troot.left);
postorder(troot.right);
Array = Array + troot.element.ToString() + " ";

}
}

public void levelorder()


{
QueuesLinked q = new QueuesLinked();
Node t = root;
Array = Array + t.element.ToString() + " ";
q.enqueue(t);
while (!q.isEmpty())
{
t = (Node)q.dequeue();
if (t.left != null)
{
Array = Array + t.left.element.ToString() + " ";
q.enqueue(t.left);
}
if (t.right != null)
{
Array = Array + t.right.element.ToString() + " " ;
q.enqueue(t.right);
}
}
}

public bool delete(int e)


{
Node p = root;
Node pp = null;
while (p != null && p.element != e)
{
pp = p;
if (e < p.element)
p = p.left;
else
p = p.right;
}
if (p == null)
return false;
if (p.left != null && p.right != null)
{
Node s = p.left;
Node ps = p;
while (s.right != null)
{
ps = s;
s = s.right;
}
p.element = s.element;
p = s;
pp = ps;
}
Node c = null;
if (p.left != null)
c = p.left;
else
c = p.right;
if (p == root)
root = null;
else
{
if (p == pp.left)
pp.left = c;
else
pp.right = c;
}
return true;
}

}
}

Code class queueslinked:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Giaodien_BinaryTree
{
public class QNode
{
public Object element;
public QNode next;
public QNode(Object e)
{
element = e;
next = null;
}
}
class QueuesLinked
{
QNode front;
QNode rear;
int size;

public QueuesLinked()
{
front = null;
rear = null;
size = 0;
}
public int length()
{
return size;
}

public bool isEmpty()


{
return size == 0;
}

public void enqueue(Object e)


{
QNode newest = new QNode(e);
if (isEmpty())
{
front = newest;
}
else
{
rear.next = newest;
}
rear = newest;
size = size + 1;
}

public Object dequeue()


{
if (isEmpty())
{
Console.WriteLine("Queue is empty");
return -1;
}
Object e = front.element;
front = front.next;
size = size - 1;
return e;
}

public void display()


{
QNode p = front;
while (p != null)
{
Console.Write(p.element + " --> ");
p = p.next;
}
Console.WriteLine();
}
}
}

Code chức năng giao diện:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Giaodien_BinaryTree
{
public partial class Form1 : Form
{
BinarySearchTree b = new BinarySearchTree();
public Node nroot;
public Form1()
{
InitializeComponent();
}

private void inorder_Click(object sender, EventArgs e)


{
b.clear();
Node nroot = b.broot();
b.inorder(nroot);
ketqua.Text = "";
ketqua.Text = b.display();
b.clear();
}

private void preorder_Click(object sender, EventArgs e)


{
b.clear();
Node nroot = b.broot();
b.preorder(nroot);
ketqua.Text = "";
ketqua.Text = b.display();
b.clear();
}

private void postorder_Click(object sender, EventArgs e)


{
b.clear();
Node nroot = b.broot();
b.postorder(nroot);
ketqua.Text = "";
ketqua.Text = b.display();
b.clear();
}

private void insert_Click(object sender, EventArgs e)


{
int value = int.Parse(nhap.Text);
b.insert(nroot,value);
}

private void Form1_Load(object sender, EventArgs e)


{

private void inroot_Click(object sender, EventArgs e)


{
int value1 = int.Parse(nhaproot.Text);
nroot = b.mainroot(value1);
}

private void levelorder_Click(object sender, EventArgs e)


{
b.clear();
b.levelorder();
ketqua.Text = "";
ketqua.Text = b.display();
b.clear();
}

private void remove_Click(object sender, EventArgs e)


{
int value = int.Parse(nhap.Text);
b.delete(value);
}
}
}

Thực hiện chạy giao diện:


Nhập root:50  Insert Root
Nhập phần tử: 30  Insert Nhập phần tử: 80  Insert

Nhập phần tử: 10  Insert Nhập phần tử: 80  Insert

Nhập phần tử: 30  Insert Nhập phần tử: 80  Insert


Kết quả: Inorder

Kết quả: Preorder

Kết quả: Inorder


Kết quả: Levelorder

Nhập phần tử:40  Delete Kết quả  Inorder

You might also like