5 #ifndef DSALGLIB_BSTREE_H 6 #define DSALGLIB_BSTREE_H 38 bstnode * create_bstnode(type param)
40 bstnode *temp =
new bstnode(param);
47 bstnode * _find_min(bstnode * temp)
49 if(temp==
nullptr)
return nullptr;
50 if(temp->left==
nullptr)
return temp;
51 return _find_min(temp->left);
54 bstnode * _find_max(bstnode * temp)
56 if(temp==
nullptr)
return nullptr;
57 if(temp->right==
nullptr)
return temp;
58 return _find_max(temp->right);
61 bool _insert(bstnode *troot,bstnode *temp)
64 if(temp->data < troot->data)
65 if(troot->left==
nullptr)
68 return _insert(troot->left,temp);
70 if(troot->right==
nullptr)
73 return _insert(troot->right,temp);
79 bstnode * _remove(bstnode *troot,type param)
82 if( troot ==
nullptr )
return troot;
84 if( param < troot->data ) troot->left = _remove(troot->left,param);
85 else if( troot->data < param ) troot->right =_remove(troot->right,param);
86 else if(troot->left!=
nullptr&&troot->right!=
nullptr)
88 troot->data = _find_min(troot->right)->data;
89 troot->right = _remove(troot->right,troot->data);
93 bstnode *temp = troot;
94 troot = ( troot->left != nullptr ) ? troot->left : troot->right;
100 void _clear(bstnode *temp)
102 if(temp==
nullptr)
return;
108 void _inorder(bstnode *temp,
void (fun)(type obj))
110 if(temp==
nullptr)
return;
112 _inorder(temp->left,fun);
114 _inorder(temp->right,fun);
117 void _preorder(bstnode *temp,
void (fun)(type obj))
119 if(temp==
nullptr)
return;
122 _preorder(temp->left,fun);
123 _preorder(temp->right,fun);
127 void _postorder(bstnode *temp,
void (fun)(type obj))
129 if(temp==
nullptr)
return;
131 _postorder(temp->left,fun);
132 _postorder(temp->right,fun);
136 void _levelorder(
void (fun) (type obj))
147 if(temp->left!=
nullptr) q.
enqueue(temp->left);
148 if(temp->right!=
nullptr) q.
enqueue(temp->right);
154 long long int _height(bstnode *temp)
157 if(temp==
nullptr)
return -1;
158 return maxof(_height(temp->left),_height(temp->right))+1;
161 bstnode * _search(bstnode *temp,type val)
163 if(temp==
nullptr)
return nullptr;
165 if(val<temp->data)
return _search(temp->left,val);
166 else if(temp->data<val)
return _search(temp->right,val);
181 return _find_min(root)->data;
186 return _find_max(root)->data;
191 bstnode *temp = create_bstnode(param);
203 bool remove(type param)
205 long long int temp=count;
206 root=_remove(root,param);
230 return _height(root);
253 _postorder(root,fun);
263 if(_search(root,val)!=
nullptr)
273 #endif //DSALGLIB_BSTREE_H
void preorder(void(fun)(type obj))
void inorder(void(fun)(type obj))
void levelorder(void(fun)(type obj))
void postorder(void(fun)(type obj))