Amaliy ish Nazariy ma’lumotlar: Binar daraxti ikkilik ifodalarni ifodalash


Download 215.87 Kb.
Sana03.02.2023
Hajmi215.87 Kb.
#1156055
Bog'liq
MTA Amaliy


O‘ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI SAMARQAND FILIALI


KOMPYUTER INJINIRINGI” FAKULTETI


AXBOROT TEXNOLOGIYALARI” KAFEDRASI





Bajardi KI 21-01 Guruh talabasi: Berkinov Ismoil
Tekshirdi: Abduvaitov Akmal

Samarqand 2023


Amaliy ish
Nazariy ma’lumotlar: Binar daraxti ikkilik ifodalarni ifodalash uchun ishlatiladigan dastur tili hisoblanadi. Binar daraxti ifodalashi mumkin boʻlgan ikkita keng tarqalgan ikkilik ifoda turi algebraik[1] va mantiqiy ifoda turlari hisoblanadi. Binar daraxti birlik va ikkilik operatorlarni oʻz ichiga olgan ifodalarni ifodalashi mumkin.
Binar ifoda daraxtining har bir tugunida nol, bitta yoki ikkita son mavjud. Ushbu cheklangan struktura ifoda daraxtlarini qayta ishlashni soddalashtiradi.(a+b)*c+7 ifodaning ifodalar daraxti
Umumiy koʻrinishi
Ikkilik ifoda daraxtining barglari operandlar, masalan, doimiylar yoki oʻzgaruvchilar nomlari va boshqa tugunlarda operatorlar mavjud. Bu alohida daraxtlar ikkilik boʻladi, chunki barcha operatsiyalar ikkilikdir va bu eng oddiy holat boʻlsa-da, tugunlarda ikkitadan ortiq son boʻlishi mumkin. Bundan tashqari, birlik minus operatorida boʻlgani kabi, tugunning har biri faqat bitta songa ega boʻlishi mumkin. Ifodalar daraxti T ni chap va oʻng pastki daraxtlarni rekursiv baholash natijasida olingan qiymatlarga ildizdagi operatorni qoʻllash orqali baholash mumkin.
Oʻtish
Algebraik ifoda ikkilik ifoda daraxtidan qavs ichiga olingan chap ifodani rekursiv ishlab chiqarish, soʻngra operatorni ildizga chiqarish va nihoyat, qavs ichiga olingan oʻng ifodani rekursiv ishlab chiqarish orqali ishlab chiqarilishi mumkin. Ushbu umumiy strategiya (chap, tugun, oʻng) tartibli o'tish sifatida tanilgan. Muqobil oʻtish strategiyasi chap pastki daraxtni, oʻng pastki daraxtni va keyin operatorni rekursiv ravishda chop etishdir. Ushbu oʻtish strategiyasi odatda buyruqdan keyingi o'tish sifatida tanilgan. Uchinchi strategiya — avval operatorni chop etish, soʻngra oldindan tartibli oʻtkazish deb nomlanuvchi chap va oʻng pastki daraxtni rekursiv ravishda chop etish.
Ushbu uchta standartdan birinchi oʻtish uch xil ifoda formatlarining ifodasidir: infiks, postfiks va prefiks. Infiks ifodasi tartibni kesib oʻtish orqali, postfiks ifodasi buyruqdan keyingi oʻtish orqali va prefiks ifodasi oldindan tartibli oʻtish orqali hosil boʻladi.
Infiks oʻtish
Infiks ifodasi chop etilganda, har bir ifodaning boshiga va oxiriga ochilish va yopish qavslari qoʻshilishi kerak. Har bir pastki daraxt pastki ifodani ifodalaganligi sababli, uning boshida ochilish qavslari va barcha sonlarni qayta ishlagandan soʻng, yopish qavslari chop etiladi.

Masalaning qo’yilishi: Muvozanatlashgan binar daraxt yarating va uni ekranda (binar) daraxt shaklida chop qiling va:
- daraxt balandligini hisoblang;
Dastur kodi:

#include


#include
using namespace std;

#define bool int

class node {
public:
int item;
node *left;
node *right;
};

node *newNode(int item) {


node *Node = new node();
Node->item = item;
Node->left = NULL;
Node->right = NULL;

return (Node);


}

bool checkHeightBalance(node *root, int *height) {

int leftHeight = 0, rightHeight = 0;

int l = 0, r = 0;

if (root == NULL) {
*height = 0;
return 1;
}

l = checkHeightBalance(root->left, &leftHeight);


r = checkHeightBalance(root->right, &rightHeight);

*height = (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;

if (std::abs(leftHeight - rightHeight >= 2))
return 0;

else
return l && r;


}

int main() {


int height = 0;
int n, h;
cout << "Daraxtning elementlari sonini kiriting - ";
cin >> n;
int a[n];
cout << "Daraxt quyidagi elementlardan tashkil topgan : ";
for(int i = 1; i <= n; i++)
{
cin >> a[i];
}
h = n/2+1;
node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);

cout << "Daraxtning balandligi - " << h << " ga teng"<

if (checkHeightBalance(root, &height))
cout << "Daraxt muvozanatlashgan";
else
cout << "Daraxt muvozanatlashmagan";
}

Dastur natijasi:



Download 215.87 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling