1+ #include < assert.h>
2+ #include < iostream>
3+ class AVL
4+ {
5+ struct treenode
6+ {
7+ treenode* left;
8+ treenode* right;
9+ int value;
10+ int height;
11+ treenode (int val, int h): left(nullptr ), right(nullptr ), value(val), height(h) {}
12+ void setleft (int val, int h)
13+ {
14+ this ->left = new treenode (val, h);
15+ }
16+ void setright (int val, int h)
17+ {
18+ this ->right = new treenode (val, h);
19+ }
20+ };
21+ public:
22+ AVL (): root(new treenode(0 , 0 )), nodecount(0 ) {};
23+ ~AVL () {clearall (root);}
24+
25+ treenode* find (int val);
26+ void insert (int val)
27+ {
28+ inserthelp (root, val);
29+ nodecount++;
30+ }
31+ void remove (int val)
32+ {
33+ if (nodecount == 0 ) {
34+ std::cout << " can't find " << val << std::endl;
35+ return ;
36+ }
37+ else {
38+ if (removehelp (root, val))
39+ nodecount--;
40+ }
41+ }
42+ void printbyorder ()
43+ {
44+ std::cout << " printbyorder:" ;
45+ print (root);
46+ std::cout << std::endl;
47+ }
48+ int size ()
49+ {
50+ return nodecount;
51+ }
52+
53+ private:
54+ treenode* root;
55+ int nodecount;
56+ int max (int a, int b)
57+ {
58+ return a > b ? a : b;
59+ }
60+ treenode* LLrotate (treenode* k1);
61+ treenode* LRrotate (treenode* k1);
62+ treenode* RRrotate (treenode* k1);
63+ treenode* RLrotate (treenode* k1);
64+ treenode* inserthelp (treenode*& node, int val);
65+ treenode* removehelp (treenode*& node, int val);
66+ void clearall (treenode* node);
67+ void print (treenode* node);
68+ int getheight (treenode* node)
69+ {
70+ return node == nullptr ? -1 : node->height ;
71+ }
72+ };
0 commit comments