SlideShare a Scribd company logo
1 of 30
багш Д.Ганцоож 1
 Хоёртын хайлтын мод
 Хоёртын хайлтын модонд хийгдэх
үйлдлүүд
 Хоёртын хайлтын модыг нэвтрүүлэх
багш Д.Ганцоож 2
 Аливаа зангилааны зүүн хүүхэд зангилаа
нь түүнээс бага элементийг, баруун хүүхэд
зангилаа нь түүнээс дандаа их элемент
агуулж байх модыг хоёртын хайлтын мод
гэнэ.
багш Д.Ганцоож 3
багш Д.Ганцоож 4
 Дараах гурван
талбараас
бүрднэ. Үүнд:
1. Өгөгдөл
2. Зүүн холбоос
3. Баруун холбоос
багш Д.Ганцоож 5
class BSTNode
{
Type element;
BSTNode left;
BSTNode right;
BSTNode(Type evalue, BSTNode lvalue,
BSTNode rvalue)
{
element = evalue;
left = lvalue;
right = rvalue;
}
}
багш Д.Ганцоож 6
 Хоёртын хайлтын модыг модны үндсээс
эхэлж байгуулах бөгөөд модны үндсийг
root гадаад заагчаар илэрхийлнэ.
 Навч зангилаануудын хувьд баруун, зүүн
зангилааг заах заагч null утга заана.
багш Д.Ганцоож 7
 Элемент нэмэх
 Элемент устгах
 Модоор гүйх
 Элемент хайх
багш Д.Ганцоож 8
class BinarySearchTree
{
BSTNode root;
public BinarySearchTree() //байгуулагч функц
{
root = null;
}
..........
}
багш Д.Ганцоож 9
public boolean Is_Empty()
{
if (root == null)
return true;
else
return false;
}
багш Д.Ганцоож 10
 Хоёртын хайлтын модонд элемент нэмэхдээ эхлээд
хоосон эсэхийг шалгана. Хэрвээ хоосон бол модны
үндсэн зангилаанд элементийг оруулж, үндсэн
зангилаан баруун зүүн холсоосыг null утга заалгана.
 Мод хоосон биш бол үндсэн зангилаанаас эхлэн
оруулах элементийг харьцуул, бага бол зүүн салаа
руу, их бол баруун салаа явьж, харьцуулалтыг
элемент тохирох байрлалд хүртэл хийнэ.
багш Д.Ганцоож 11
Элемент нэмэх:
public void insert(int key)
{
if(Is_Empty())
root = new BSTNode(key, null, null);
else
Insert_Key(key, root);
}
багш Д.Ганцоож 12
public void Insert_Key(int key, BSTNode leaf)
{
if(key < leaf.element)
{
if(leaf.left != null)
Insert_Key(key, leaf.left);
else
leaf.left = new BSTNode(key, null, null);
}
багш Д.Ганцоож 13
else if(key >= leaf.element)
{
if(leaf.right != null)
Insert_Key(key, leaf.right);
else
leaf.right = new BSTNode(key, null, null);
}
}
багш Д.Ганцоож 14
 Устгах үйлдлийг хийхдээ устгах зангилаа
модны аль байрлалд байгаагаас шалтгаалж
ялгаатайгаар хийгдэнэ.
1. Хэрээ устгах зангилаа модны навч бол уг
зангилааг шууд устгаж, түүнийг зааж байгаа эх
зангилааны заагчийг null утга заалгана.
багш Д.Ганцоож 15
2. Устгах зангилаа зөвхөн зүүн дэд зангилаатай
бол түүнийг заах эх зангилааны заагчийг
устгах зангилааны зүүн дэд зангилааг
заалгасны дараа уг зангилааг устгана.
3. Устгах зангилаа зөвхөн баруун дэд
зангилаатай бол түүнийг заах эх зангилааны
заагчийг устгах зангилааны баруун дэд
зангилааг заалгасны дараа уг зангилааг
устгана.
багш Д.Ганцоож 16
4. Хэрвээ устгах гэж буй зангилаа баруун
зүүн хоёр хүүхэд зангилаатай бол хоёр
боломж буюу устгах зангилааны байрлалд
шилжих хоёр ялгаатай зангилаа байна.
› Устгах зангилааны баруун дэд зангилааны
хамгийн зүүн дэд зангилаа
› Устгах зангилааны зүүн дэд зангилааны
хамгийн баруун дэд зангилаа
багш Д.Ганцоож 17
public void delete(int key)
{
if(Is_empty())
Delete_Key(key, root);
else
System.out.println(“Tree is Empty”);
}
багш Д.Ганцоож 18
public void Delete_Key(int key, BSTNode leaf)
{
if(leaf == null) {
System.out.println(“element oldsongui.”)
return 0;
}
else if(key == leaf.element)
DeleteNode(leaf);
else if(key < leaf.element)
Delete_Key(key, leaf.left);
else
Delete_Key(key, leaf.right);
}
багш Д.Ганцоож 19
public void DeleteNode(BSTNode leaf)
{
BSTNode temp;
if(leaf.left == null && leaf.right == null)
leaf = null;
else if(leaf.left != null && leaf.right == null)
{ temp = leaf;
leaf = leaf.left;
temp = null;
}
багш Д.Ганцоож 20
else if(leaf.left == null && leaf.right != null)
{ temp = leaf;
leaf = leaf.right;
temp = null;
}
else
leaf.element = processLeftMost(leaf.right);
}
багш Д.Ганцоож 21
public int processLeftMost(BSTNode leaf)
{
int d; BSTNode temp;
if(leaf.left == null)
{
d = leaf.element;
temp = leaf;
leaf = leaf.right;
temp = null;
return d;
}
else
return processLeftMost(leaf.left);
}
багш Д.Ганцоож 22
 Модны бүх зангилаанд очиж
боловсруулалт хийх, зангилаануудын утгыг
хэвлэх үйлдлийг модоор гүйх гэнэ.
Модоор гүйх дараах аргууд бий. Үүнд:
1. PreOrder – урьтаж очих
2. InOrder – тэгш хэмт арга
3. PostOrder - хоцорч очих
багш Д.Ганцоож 23
 Энэ арга нь эхлээд үндсэн зангилаанд очоод,
дараа нь зүүн дэд модонд очиж, эцэст нь баруун
дэд модонд очих дараалалтайгаар хийгдэнэ.
public void PreOrder()
{
if( ! Is_empty() )
PreOrderPrint(root);
else
System.out.println(“tree is empty”);
}
багш Д.Ганцоож 24
public void PreOrderPrint(BSTNode leaf)
{
System.out.println(leaf.element);
if(leaf.left != null)
PreOrderPrint(leaf.left);
if(leaf.right != null)
PreOrderPrint(leaf.right);
}
багш Д.Ганцоож 25
 Энэ арга нь эхлээд зүүн дэд модонд очоод,
дараа нь уг зангилаанд очоод, эцэст нь баруун
дэд модонд очих дараалалтайгаар хийгдэнэ.
public void InOrder()
{
if( ! Is_Empty())
InOrderPrint(root);
else
System.out.println(“tree is empty”);
}
багш Д.Ганцоож 26
public void InOrderPrint(BSTNode leaf)
{
if(leaf.left != null)
InOrderPrint(leaf.left);
System.out.println(leaf.element);
if(leaf.right != null)
InOrderPrint(leaf.right);
}
багш Д.Ганцоож 27
 Энэ арга нь эхлээд зүүн дэд модонд, дараа нь
баруун дэд модонд, эцэст нь уг зангилаанд очих
дараалалтайгаар хийгдэнэ.
public void PostOrder()
{
if( ! Is_Empty())
PostOrderPrint(root);
else
System.out.println(“tree is empty”);
}
багш Д.Ганцоож 28
public void PostOrderPrint(BSTNode leaf)
{
if(leaf.left != null)
PostOrderPrint(leaf.left);
if(leaf.right != null)
PostOrderPrint(leaf.right);
System.out.println(leaf.element);
}
багш Д.Ганцоож 29
public void DestroyTree() {
Destroy_Tree(root);
}
public void Destroy_Tree(BSTNode leaf)
{
if(leaf != null)
{
Destroy_Tree(leaf.left);
Destroy_Tree(leaf.right);
leaf = null;
}
leaf = null;
}
багш Д.Ганцоож 30

More Related Content

What's hot (20)

9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
database 7-8
database 7-8database 7-8
database 7-8
 
u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4u.cs101 "Алгоритм ба програмчлал" Лекц №4
u.cs101 "Алгоритм ба програмчлал" Лекц №4
 
Lesson 7
Lesson 7Lesson 7
Lesson 7
 
It101 lab9
It101 lab9It101 lab9
It101 lab9
 
It101 lec6 10.06
It101 lec6 10.06It101 lec6 10.06
It101 lec6 10.06
 
Өгөгдлийн бүтэц 13
Өгөгдлийн бүтэц 13Өгөгдлийн бүтэц 13
Өгөгдлийн бүтэц 13
 
Lab3 it101
Lab3 it101Lab3 it101
Lab3 it101
 
Math101 Lecture4
Math101 Lecture4Math101 Lecture4
Math101 Lecture4
 
Day 1 database
Day 1   databaseDay 1   database
Day 1 database
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9
 
тооллын систем
тооллын системтооллын систем
тооллын систем
 
Excel
ExcelExcel
Excel
 
Лекц №10
Лекц №10Лекц №10
Лекц №10
 
U.cs101 алгоритм программчлал-7
U.cs101   алгоритм программчлал-7U.cs101   алгоритм программчлал-7
U.cs101 алгоритм программчлал-7
 
Dsi lec5
Dsi lec5Dsi lec5
Dsi lec5
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчим
 
Лекц №12
Лекц №12Лекц №12
Лекц №12
 

More from International Ulaanbaatar University (20)

Lec8
Lec8 Lec8
Lec8
 
Lec7
Lec7 Lec7
Lec7
 
Lec5 6
Lec5 6 Lec5 6
Lec5 6
 
Lec4
Lec4 Lec4
Lec4
 
Lec3
Lec3 Lec3
Lec3
 
Lec2
Lec2 Lec2
Lec2
 
Lec1
Lec1 Lec1
Lec1
 
Визуаль програмчлал бие даалт
Визуаль програмчлал бие даалтВизуаль програмчлал бие даалт
Визуаль програмчлал бие даалт
 
ОХШЗ - Бие Даалт
ОХШЗ - Бие ДаалтОХШЗ - Бие Даалт
ОХШЗ - Бие Даалт
 
Ood lesson12.1 ---------
Ood lesson12.1  ---------Ood lesson12.1  ---------
Ood lesson12.1 ---------
 
Ood lesson11 sequence
Ood lesson11 sequenceOod lesson11 sequence
Ood lesson11 sequence
 
Ood lesson10 statechart
Ood lesson10 statechartOod lesson10 statechart
Ood lesson10 statechart
 
Ood lesson9 activity
Ood lesson9 activityOod lesson9 activity
Ood lesson9 activity
 
Ood lesson7,8 class
Ood lesson7,8 classOod lesson7,8 class
Ood lesson7,8 class
 
Ood lesson6 class
Ood lesson6 classOod lesson6 class
Ood lesson6 class
 
Ood lesson5
Ood lesson5Ood lesson5
Ood lesson5
 
Ood lesson4
Ood lesson4Ood lesson4
Ood lesson4
 
Ood lesson3
Ood lesson3Ood lesson3
Ood lesson3
 
Ood lesson2
Ood lesson2Ood lesson2
Ood lesson2
 
Ood lesson1
Ood lesson1Ood lesson1
Ood lesson1
 

Өгөгдлийн бүтэц 15

  • 2.  Хоёртын хайлтын мод  Хоёртын хайлтын модонд хийгдэх үйлдлүүд  Хоёртын хайлтын модыг нэвтрүүлэх багш Д.Ганцоож 2
  • 3.  Аливаа зангилааны зүүн хүүхэд зангилаа нь түүнээс бага элементийг, баруун хүүхэд зангилаа нь түүнээс дандаа их элемент агуулж байх модыг хоёртын хайлтын мод гэнэ. багш Д.Ганцоож 3
  • 5.  Дараах гурван талбараас бүрднэ. Үүнд: 1. Өгөгдөл 2. Зүүн холбоос 3. Баруун холбоос багш Д.Ганцоож 5
  • 6. class BSTNode { Type element; BSTNode left; BSTNode right; BSTNode(Type evalue, BSTNode lvalue, BSTNode rvalue) { element = evalue; left = lvalue; right = rvalue; } } багш Д.Ганцоож 6
  • 7.  Хоёртын хайлтын модыг модны үндсээс эхэлж байгуулах бөгөөд модны үндсийг root гадаад заагчаар илэрхийлнэ.  Навч зангилаануудын хувьд баруун, зүүн зангилааг заах заагч null утга заана. багш Д.Ганцоож 7
  • 8.  Элемент нэмэх  Элемент устгах  Модоор гүйх  Элемент хайх багш Д.Ганцоож 8
  • 9. class BinarySearchTree { BSTNode root; public BinarySearchTree() //байгуулагч функц { root = null; } .......... } багш Д.Ганцоож 9
  • 10. public boolean Is_Empty() { if (root == null) return true; else return false; } багш Д.Ганцоож 10
  • 11.  Хоёртын хайлтын модонд элемент нэмэхдээ эхлээд хоосон эсэхийг шалгана. Хэрвээ хоосон бол модны үндсэн зангилаанд элементийг оруулж, үндсэн зангилаан баруун зүүн холсоосыг null утга заалгана.  Мод хоосон биш бол үндсэн зангилаанаас эхлэн оруулах элементийг харьцуул, бага бол зүүн салаа руу, их бол баруун салаа явьж, харьцуулалтыг элемент тохирох байрлалд хүртэл хийнэ. багш Д.Ганцоож 11
  • 12. Элемент нэмэх: public void insert(int key) { if(Is_Empty()) root = new BSTNode(key, null, null); else Insert_Key(key, root); } багш Д.Ганцоож 12
  • 13. public void Insert_Key(int key, BSTNode leaf) { if(key < leaf.element) { if(leaf.left != null) Insert_Key(key, leaf.left); else leaf.left = new BSTNode(key, null, null); } багш Д.Ганцоож 13
  • 14. else if(key >= leaf.element) { if(leaf.right != null) Insert_Key(key, leaf.right); else leaf.right = new BSTNode(key, null, null); } } багш Д.Ганцоож 14
  • 15.  Устгах үйлдлийг хийхдээ устгах зангилаа модны аль байрлалд байгаагаас шалтгаалж ялгаатайгаар хийгдэнэ. 1. Хэрээ устгах зангилаа модны навч бол уг зангилааг шууд устгаж, түүнийг зааж байгаа эх зангилааны заагчийг null утга заалгана. багш Д.Ганцоож 15
  • 16. 2. Устгах зангилаа зөвхөн зүүн дэд зангилаатай бол түүнийг заах эх зангилааны заагчийг устгах зангилааны зүүн дэд зангилааг заалгасны дараа уг зангилааг устгана. 3. Устгах зангилаа зөвхөн баруун дэд зангилаатай бол түүнийг заах эх зангилааны заагчийг устгах зангилааны баруун дэд зангилааг заалгасны дараа уг зангилааг устгана. багш Д.Ганцоож 16
  • 17. 4. Хэрвээ устгах гэж буй зангилаа баруун зүүн хоёр хүүхэд зангилаатай бол хоёр боломж буюу устгах зангилааны байрлалд шилжих хоёр ялгаатай зангилаа байна. › Устгах зангилааны баруун дэд зангилааны хамгийн зүүн дэд зангилаа › Устгах зангилааны зүүн дэд зангилааны хамгийн баруун дэд зангилаа багш Д.Ганцоож 17
  • 18. public void delete(int key) { if(Is_empty()) Delete_Key(key, root); else System.out.println(“Tree is Empty”); } багш Д.Ганцоож 18
  • 19. public void Delete_Key(int key, BSTNode leaf) { if(leaf == null) { System.out.println(“element oldsongui.”) return 0; } else if(key == leaf.element) DeleteNode(leaf); else if(key < leaf.element) Delete_Key(key, leaf.left); else Delete_Key(key, leaf.right); } багш Д.Ганцоож 19
  • 20. public void DeleteNode(BSTNode leaf) { BSTNode temp; if(leaf.left == null && leaf.right == null) leaf = null; else if(leaf.left != null && leaf.right == null) { temp = leaf; leaf = leaf.left; temp = null; } багш Д.Ганцоож 20
  • 21. else if(leaf.left == null && leaf.right != null) { temp = leaf; leaf = leaf.right; temp = null; } else leaf.element = processLeftMost(leaf.right); } багш Д.Ганцоож 21
  • 22. public int processLeftMost(BSTNode leaf) { int d; BSTNode temp; if(leaf.left == null) { d = leaf.element; temp = leaf; leaf = leaf.right; temp = null; return d; } else return processLeftMost(leaf.left); } багш Д.Ганцоож 22
  • 23.  Модны бүх зангилаанд очиж боловсруулалт хийх, зангилаануудын утгыг хэвлэх үйлдлийг модоор гүйх гэнэ. Модоор гүйх дараах аргууд бий. Үүнд: 1. PreOrder – урьтаж очих 2. InOrder – тэгш хэмт арга 3. PostOrder - хоцорч очих багш Д.Ганцоож 23
  • 24.  Энэ арга нь эхлээд үндсэн зангилаанд очоод, дараа нь зүүн дэд модонд очиж, эцэст нь баруун дэд модонд очих дараалалтайгаар хийгдэнэ. public void PreOrder() { if( ! Is_empty() ) PreOrderPrint(root); else System.out.println(“tree is empty”); } багш Д.Ганцоож 24
  • 25. public void PreOrderPrint(BSTNode leaf) { System.out.println(leaf.element); if(leaf.left != null) PreOrderPrint(leaf.left); if(leaf.right != null) PreOrderPrint(leaf.right); } багш Д.Ганцоож 25
  • 26.  Энэ арга нь эхлээд зүүн дэд модонд очоод, дараа нь уг зангилаанд очоод, эцэст нь баруун дэд модонд очих дараалалтайгаар хийгдэнэ. public void InOrder() { if( ! Is_Empty()) InOrderPrint(root); else System.out.println(“tree is empty”); } багш Д.Ганцоож 26
  • 27. public void InOrderPrint(BSTNode leaf) { if(leaf.left != null) InOrderPrint(leaf.left); System.out.println(leaf.element); if(leaf.right != null) InOrderPrint(leaf.right); } багш Д.Ганцоож 27
  • 28.  Энэ арга нь эхлээд зүүн дэд модонд, дараа нь баруун дэд модонд, эцэст нь уг зангилаанд очих дараалалтайгаар хийгдэнэ. public void PostOrder() { if( ! Is_Empty()) PostOrderPrint(root); else System.out.println(“tree is empty”); } багш Д.Ганцоож 28
  • 29. public void PostOrderPrint(BSTNode leaf) { if(leaf.left != null) PostOrderPrint(leaf.left); if(leaf.right != null) PostOrderPrint(leaf.right); System.out.println(leaf.element); } багш Д.Ганцоож 29
  • 30. public void DestroyTree() { Destroy_Tree(root); } public void Destroy_Tree(BSTNode leaf) { if(leaf != null) { Destroy_Tree(leaf.left); Destroy_Tree(leaf.right); leaf = null; } leaf = null; } багш Д.Ганцоож 30