#include <iostream>
using namespace std;
struct node
{
char val;
int count;
struct node *l, *r;
};
struct node *newNode(char item)
{
struct node *data = new node();
data->val = item;
data->l =NULL;
data->r = NULL;
data->count = 1;
return data;
}
void function (struct node *base)
{
if (base != NULL)
{ if(base->count==1){
function(base->l);
cout << base->val << " ";
function(base->r);
}
else{
for(int i=1;i<=base->count;i++)
cout << base->val << " ";
function(base->l);
function(base->r);
}
}
}
void inorder (struct node *base)
{
if (base != NULL){
inorder(base->l);
cout << base->val << "(" << base->count << ") "; inorder(base->r);
}
}
struct node* ins_func (struct node* node, char val)
{
if (node == NULL)
return newNode(val);
if (val == node->val){
(node->count)++;
return node;
}
if (val< node->val){
node->l = ins_func(node->l, val);
}
else
node->r = ins_func(node->r, val);
return node;
}
struct node * mv_node (struct node* node)
{
struct node* crnt = node;
while (crnt->l != NULL)
crnt = crnt->l;
return crnt;
}
struct node* del_node (struct node* base, char val)//delete funtion
{
if (base == NULL)
return base;
if (val < base->val)
base->l = del_node(base->l, val);
else if (val > base->val)
base->r = del_node(base->r, val);
else{
if (base->count > 1){
(base->count)--;
return base;
}
if (base->l == NULL){
struct node *data = base->r;
delete(base);
return data;
}
else if (base->r == NULL){
struct node *data = base->l;
delete(base);
return data;
}
struct node* data = mv_node(base->r);
base->val = data->val;
base->r = del_node(base->r, data->val);
}
return base;
}
int main()
{
struct node *base = NULL;
char a;
cout << "Enter characters for your tree: \n (0 for exit):"<<endl;
cin >> a;
while (a != '0') {
base=ins_func (base,a);
cin >> a;
}
cout << "\nInorder traversal: " << endl;
function (base);
cout<<endl;
inorder (base);
cout<<"\n"<<endl;
char b;
cout << "enter the character that you want to delete . \n (If you don't, please enter 0 again) :" << endl;
cin >> b;
cout<<endl;
while (b != '0') {
base = del_node (base, b);
cin >> b;
}
cout<<endl;
cout << "Inorder traversal:"<<endl;
function (base);
cout<<endl;
inorder (base);
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}