Агуулга: Энэ бүлэгт ашигласан программын кодуудыг энд үзүүллээ. Хоёртын мод нь модны онцгой нэг тохиолдол бөгөөд зангилаа бүр нь хоёроос илүүгүй дэд зангилаатай байдаг. Хэрэв мод нэг ч зангилаа агуулаагүй бол хоосон мод буюу null мод/зангилаа гэж нэрлэнэ. Зангилааны хоёр дэд зангилааг зүүн дэд зангилаа ба баруун дэд зангилаа гэж ялгадаг. Зүүн дэд зангилаанаас салаалах модыг зүүн дэд мод, баруун дэд зангилаанаас салаалах модыг баруун дэд мод гэнэ.
Хоёртын мод
1. Хоёртын мод ба Стекийн классыг main() функцэд
// Data Structure & Algorithm C++, Otgonbayar Tovuudorj
// Chapter 9: Trees
// Binary Tree
// to simplify the code using only for addition and multiplication operations
// Binary tree preorder traversal converts Polish postfix notation to prefix notation
// using Stack claas defined in "stack_list.h" in the chapter 7
#include "stack_list.h"
template<class Type>
class BinTree {
Type data;
BinTree<Type> *r, *l;
public:
BinTree(Type item) : data(item), l(NULL), r(NULL) {};
~BinTree();
void setr(BinTree *rp) { r = rp;}
void setl(BinTree *lp) { l = lp;}
BinTree* getr() { return r; }
BinTree* getl() { return l; }
void print() { cout << data; }
};
int main()
{
BinTree<char> *ptree, *child;
Stack<BinTree<char> *> stack;
const char *postfix="abc+de**f+*";
char c;
int i = 0;
cout << "Polish postfix notation: " << postfix << endl;
while(c = *(postfix + i++)) {
ptree = new BinTree<char>(c);
if(c == '+' || c=='*') {
stack.pop(child); ptree->setr(child);
stack.pop(child); ptree->setl(child);
}
stack.push(ptree);
}
cout << "Polish prefix notation: ";
while(!stack.empty()) {
stack.pop(ptree);
ptree->print();
if(child = ptree->getr()) stack.push(child);
if(child = ptree->getl()) stack.push(child);
}
cout << endl;
}
2. Толгой файл: stack_list.h
Энэ толгой файл ни Бүлэг 7. Стек тодорхойлогдсон.
// Data Structure & Algorithm C++, Otgonbayar Tovuudorj
// Chapter 7: Stack
// Chapter 9: Trees
// Chapter 11: Advanced sorting algorithms
// Stack class using linked list
// Filename: stack_list.h
