Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Дерево поиска
- 1 создать
- 2 уничтожить
- 3 пусто ли
- 4 очистить
- 5 добавить эл
- 6 уничтожить эл
- 7 найти эл
- 8.9 найти мин.макс
- 10 найти след эл.предыдущий
- 11 обьединение деревьев с/без разбора эл
- 12 разбиение дерева
- */
- #include <iostream>
- using namespace std;
- template<class T>class CTree
- {
- public:
- class CNode
- {
- public:
- T v; CNode *left, *right, *par;
- CNode(const T&v,CNode *par){this->v=v; this->par=par; left=right=NULL;}
- CNode *FindMin(){CNode *n;if(this==NULL)return NULL;for(n=this;n->left; n=n->left);return n;}
- CNode ){CNode *n;if(this==NULL return NULL;for(n=this;n->right; n=n->right);return n;}
- CNode ){if(this==NULLreturn NULL;if(right) return right->FindMin();CNode *n;
- for(n=this;n->par;n=n->par)if(n==n->par->left) return n->par;return NULL;}
- CNode *Add(const T&x){if(this==NULL||v==x)return NULL;if(x>v){if(right==NULL) return right=new CNode(x,this);return right->Add(x);}
- {if(left==NULL)return left=new CNode(x,this);return left->Add(x);}
- }
- } *root;
- CTree(){root=NULL;}
- int IsEmpty(){return root==NULL;}
- CNode *FindMin(){return root->FindMin();}
- CNode ){return root->FindMax(;}
- CNode CNode*n{return n->Next();}
- CNode *Add(const T&x){if(root==NULL)return root=new CNode(x,NULL); return root->Add(x);}
- };
- int main(void)
- {
- CTree<int> t; int i,x; CTree<int>::CNode *n;
- for(i=0,x=7;i<13;i++,x+=7)t.Add(x%13);
- for(n=t.FindMin();n;n=t.Next(n))cout«n->v«" "; cout«endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement