From 52ddab8063fb65a39ab350dff54f0db7154e9952 Mon Sep 17 00:00:00 2001
From: Farid Alijani <farid.alijani@student.lut.fi>
Date: Wed, 1 Jun 2016 22:25:55 +0200
Subject: [PATCH] bst added

---
 Files_4_thesis/BST               | Bin 0 -> 14150 bytes
 Files_4_thesis/bst.cpp           | 294 +++++++++++++++++++++++++++++++
 Files_4_thesis/bst.cpp~          | 292 ++++++++++++++++++++++++++++++
 MobileRobot/ObjectTrack/bst      | Bin 9222 -> 13512 bytes
 MobileRobot/ObjectTrack/bst.cpp  | 148 +++++++++++++---
 MobileRobot/ObjectTrack/bst.cpp~ | 152 ++++++++++++----
 6 files changed, 825 insertions(+), 61 deletions(-)
 create mode 100755 Files_4_thesis/BST
 create mode 100644 Files_4_thesis/bst.cpp
 create mode 100644 Files_4_thesis/bst.cpp~

diff --git a/Files_4_thesis/BST b/Files_4_thesis/BST
new file mode 100755
index 0000000000000000000000000000000000000000..b1a488a93818a9ff352afdaf38fa98d875ec5ecc
GIT binary patch
literal 14150
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
Ds+QZ9

literal 0
HcmV?d00001

diff --git a/Files_4_thesis/bst.cpp b/Files_4_thesis/bst.cpp
new file mode 100644
index 00000000..b81a9564
--- /dev/null
+++ b/Files_4_thesis/bst.cpp
@@ -0,0 +1,294 @@
+//Binary Search Tree Program
+
+#include <iostream>
+#include <cstdlib>
+using namespace std;
+
+class BinarySearchTree
+{
+    private:
+        struct tree_node
+        {
+           tree_node* left;
+           tree_node* right;
+           int data;
+        };
+        tree_node* root;
+    
+    public:
+        BinarySearchTree()
+        {
+           root = NULL;
+        }
+       
+        bool isEmpty() const { return root==NULL; }
+        void print_inorder();
+        void inorder(tree_node*);
+        void print_preorder();
+        void preorder(tree_node*);
+        void print_postorder();
+        void postorder(tree_node*);
+        void insert(int);
+        void remove(int);
+};
+
+// Smaller elements go left
+// larger elements go right
+void BinarySearchTree::insert(int d)
+{
+    tree_node* t = new tree_node;
+    tree_node* parent;
+    t->data = d;
+    t->left = NULL;
+    t->right = NULL;
+    parent = NULL;
+    
+    // is this a new tree?
+    if(isEmpty()) root = t;
+    else
+    {
+        //Note: ALL insertions are as leaf nodes
+        tree_node* curr;
+        curr = root;
+        // Find the Node's parent
+        while(curr)
+        {
+            parent = curr;
+            if(t->data > curr->data) curr = curr->right;
+            else curr = curr->left;
+        }
+
+        if(t->data < parent->data)
+           parent->left = t;
+        else
+           parent->right = t;
+    }
+}
+
+void BinarySearchTree::remove(int d)
+{
+    //Locate the element
+    bool found = false;
+    if(isEmpty())
+    {
+        cout<<" This Tree is empty! "<<endl;
+        return;
+    }
+    
+    tree_node* curr;
+    tree_node* parent;
+    curr = root;
+    
+    while(curr != NULL)
+    {
+         if(curr->data == d)
+         {
+            found = true;
+            break;
+         }
+         else
+         {
+             parent = curr;
+             if(d>curr->data) curr = curr->right;
+             else curr = curr->left;
+         }
+    }
+    if(!found)
+		 {
+        cout<<" Data not found! "<<endl;
+        return;
+    }
+
+
+		 // 3 cases :
+    // 1. We're removing a leaf node
+    // 2. We're removing a node with a single child
+    // 3. we're removing a node with 2 children
+
+    // Node with single child
+    if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL && curr->right == NULL))
+    {
+       if(curr->left == NULL && curr->right != NULL)
+       {
+           if(parent->left == curr)
+           {
+             parent->left = curr->right;
+             delete curr;
+           }
+           else
+           {
+             parent->right = curr->right;
+             delete curr;
+           }
+       }
+       else // left child present, no right child
+       {
+          if(parent->left == curr)
+           {
+             parent->left = curr->left;
+             delete curr;
+           }
+           else
+           {
+             parent->right = curr->left;
+             delete curr;
+           }
+       }
+     return;
+    }
+
+		 //We're looking at a leaf node
+		 if( curr->left == NULL && curr->right == NULL)
+    {
+        if(parent->left == curr) parent->left = NULL;
+        else parent->right = NULL;
+		 		 delete curr;
+		 		 return;
+    }
+
+
+    //Node with 2 children
+    // replace node with smallest value in right subtree
+    if (curr->left != NULL && curr->right != NULL)
+    {
+        tree_node* chkr;
+        chkr = curr->right;
+        if((chkr->left == NULL) && (chkr->right == NULL))
+        {
+            curr = chkr;
+            delete chkr;
+            curr->right = NULL;
+        }
+        else // right child has children
+        {
+            //if the node's right child has a left child
+            // Move all the way down left to locate smallest element
+
+            if((curr->right)->left != NULL)
+            {
+                tree_node* lcurr;
+                tree_node* lcurrp;
+                lcurrp = curr->right;
+                lcurr = (curr->right)->left;
+                while(lcurr->left != NULL)
+                {
+                   lcurrp = lcurr;
+                   lcurr = lcurr->left;
+                }
+		curr->data = lcurr->data;
+                delete lcurr;
+                lcurrp->left = NULL;
+           }
+           else
+           {
+               tree_node* tmp;
+               tmp = curr->right;
+               curr->data = tmp->data;
+	       curr->right = tmp->right;
+               delete tmp;
+           }
+
+        }
+		 return;
+    }
+
+}
+
+void BinarySearchTree::print_inorder()
+{
+  inorder(root);
+}
+
+void BinarySearchTree::inorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        if(p->left) inorder(p->left);
+        cout<<" "<<p->data<<" ";
+        if(p->right) inorder(p->right);
+    }
+    else return;
+}
+
+void BinarySearchTree::print_preorder()
+{
+    preorder(root);
+}
+
+void BinarySearchTree::preorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        cout<<" "<<p->data<<" ";
+        if(p->left) preorder(p->left);
+        if(p->right) preorder(p->right);
+    }
+    else return;
+}
+
+void BinarySearchTree::print_postorder()
+{
+    postorder(root);
+}
+
+void BinarySearchTree::postorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        if(p->left) postorder(p->left);
+        if(p->right) postorder(p->right);
+        cout<<" "<<p->data<<" ";
+    }
+    else return;
+}
+
+int main()
+{
+    BinarySearchTree b;
+    int ch,tmp,tmp1;
+    while(1)
+    {
+       cout<<endl<<endl;
+       cout<<" Binary Search Tree Operations "<<endl;
+       cout<<" ----------------------------- "<<endl;
+       cout<<" 1. Insertion/Creation "<<endl;
+       cout<<" 2. In-Order Traversal "<<endl;
+       cout<<" 3. Pre-Order Traversal "<<endl;
+       cout<<" 4. Post-Order Traversal "<<endl;
+       cout<<" 5. Removal "<<endl;
+       cout<<" 6. Exit "<<endl;
+       cout<<" Enter your choice : ";
+       
+       cin>>ch;
+       
+       switch(ch)
+       {
+           case 1 : cout<<" Enter Number to be inserted : ";
+                    cin>>tmp;
+                    b.insert(tmp);
+                    break;
+           case 2 : cout<<endl;
+                    cout<<" In-Order Traversal "<<endl;
+                    cout<<" -------------------"<<endl;
+                    b.print_inorder();
+                    break;
+           case 3 : cout<<endl;
+                    cout<<" Pre-Order Traversal "<<endl;
+                    cout<<" -------------------"<<endl;
+                    b.print_preorder();
+                    break;
+           case 4 : cout<<endl;
+                    cout<<" Post-Order Traversal "<<endl;
+                    cout<<" --------------------"<<endl;
+                    b.print_postorder();
+                    break;
+           case 5 : cout<<" Enter data to be deleted : ";
+                    cin>>tmp1;
+                    b.remove(tmp1);
+                    break;
+           case 6 : 
+                    return 0;
+                    
+       }
+    }
+}
diff --git a/Files_4_thesis/bst.cpp~ b/Files_4_thesis/bst.cpp~
new file mode 100644
index 00000000..75d5deb8
--- /dev/null
+++ b/Files_4_thesis/bst.cpp~
@@ -0,0 +1,292 @@
+//Binary Search Tree Program
+
+#include <iostream>
+#include <cstdlib>
+using namespace std;
+
+class BinarySearchTree
+{
+    private:
+        struct tree_node
+        {
+           tree_node* left;
+           tree_node* right;
+           int data;
+        };
+        tree_node* root;
+    
+    public:
+        BinarySearchTree()
+        {
+           root = NULL;
+        }
+       
+        bool isEmpty() const { return root==NULL; }
+        void print_inorder();
+        void inorder(tree_node*);
+        void print_preorder();
+        void preorder(tree_node*);
+        void print_postorder();
+        void postorder(tree_node*);
+        void insert(int);
+        void remove(int);
+};
+
+// Smaller elements go left
+// larger elements go right
+void BinarySearchTree::insert(int d)
+{
+    tree_node* t = new tree_node;
+    tree_node* parent;
+    t->data = d;
+    t->left = NULL;
+    t->right = NULL;
+    parent = NULL;
+    
+    // is this a new tree?
+    if(isEmpty()) root = t;
+    else
+    {
+        //Note: ALL insertions are as leaf nodes
+        tree_node* curr;
+        curr = root;
+        // Find the Node's parent
+        while(curr)
+        {
+            parent = curr;
+            if(t->data > curr->data) curr = curr->right;
+            else curr = curr->left;
+        }
+
+        if(t->data < parent->data)
+           parent->left = t;
+        else
+           parent->right = t;
+    }
+}
+
+void BinarySearchTree::remove(int d)
+{
+    //Locate the element
+    bool found = false;
+    if(isEmpty())
+    {
+        cout<<" This Tree is empty! "<<endl;
+        return;
+    }
+    
+    tree_node* curr;
+    tree_node* parent;
+    curr = root;
+    
+    while(curr != NULL)
+    {
+         if(curr->data == d)
+         {
+            found = true;
+            break;
+         }
+         else
+         {
+             parent = curr;
+             if(d>curr->data) curr = curr->right;
+             else curr = curr->left;
+         }
+    }
+    if(!found)
+		 {
+        cout<<" Data not found! "<<endl;
+        return;
+    }
+
+
+		 // 3 cases :
+    // 1. We're removing a leaf node
+    // 2. We're removing a node with a single child
+    // 3. we're removing a node with 2 children
+
+    // Node with single child
+    if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL && curr->right == NULL))
+    {
+       if(curr->left == NULL && curr->right != NULL)
+       {
+           if(parent->left == curr)
+           {
+             parent->left = curr->right;
+             delete curr;
+           }
+           else
+           {
+             parent->right = curr->right;
+             delete curr;
+           }
+       }
+       else // left child present, no right child
+       {
+          if(parent->left == curr)
+           {
+             parent->left = curr->left;
+             delete curr;
+           }
+           else
+           {
+             parent->right = curr->left;
+             delete curr;
+           }
+       }
+     return;
+    }
+
+		 //We're looking at a leaf node
+		 if( curr->left == NULL && curr->right == NULL)
+    {
+        if(parent->left == curr) parent->left = NULL;
+        else parent->right = NULL;
+		 		 delete curr;
+		 		 return;
+    }
+
+
+    //Node with 2 children
+    // replace node with smallest value in right subtree
+    if (curr->left != NULL && curr->right != NULL)
+    {
+        tree_node* chkr;
+        chkr = curr->right;
+        if((chkr->left == NULL) && (chkr->right == NULL))
+        {
+            curr = chkr;
+            delete chkr;
+            curr->right = NULL;
+        }
+        else // right child has children
+        {
+            //if the node's right child has a left child
+            // Move all the way down left to locate smallest element
+
+            if((curr->right)->left != NULL)
+            {
+                tree_node* lcurr;
+                tree_node* lcurrp;
+                lcurrp = curr->right;
+                lcurr = (curr->right)->left;
+                while(lcurr->left != NULL)
+                {
+                   lcurrp = lcurr;
+                   lcurr = lcurr->left;
+                }
+		curr->data = lcurr->data;
+                delete lcurr;
+                lcurrp->left = NULL;
+           }
+           else
+           {
+               tree_node* tmp;
+               tmp = curr->right;
+               curr->data = tmp->data;
+	       curr->right = tmp->right;
+               delete tmp;
+           }
+
+        }
+		 return;
+    }
+
+}
+
+void BinarySearchTree::print_inorder()
+{
+  inorder(root);
+}
+
+void BinarySearchTree::inorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        if(p->left) inorder(p->left);
+        cout<<" "<<p->data<<" ";
+        if(p->right) inorder(p->right);
+    }
+    else return;
+}
+
+void BinarySearchTree::print_preorder()
+{
+    preorder(root);
+}
+
+void BinarySearchTree::preorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        cout<<" "<<p->data<<" ";
+        if(p->left) preorder(p->left);
+        if(p->right) preorder(p->right);
+    }
+    else return;
+}
+
+void BinarySearchTree::print_postorder()
+{
+    postorder(root);
+}
+
+void BinarySearchTree::postorder(tree_node* p)
+{
+    if(p != NULL)
+    {
+        if(p->left) postorder(p->left);
+        if(p->right) postorder(p->right);
+        cout<<" "<<p->data<<" ";
+    }
+    else return;
+}
+
+int main()
+{
+    BinarySearchTree b;
+    int ch,tmp,tmp1;
+    while(1)
+    {
+       cout<<endl<<endl;
+       cout<<" Binary Search Tree Operations "<<endl;
+       cout<<" ----------------------------- "<<endl;
+       cout<<" 1. Insertion/Creation "<<endl;
+       cout<<" 2. In-Order Traversal "<<endl;
+       cout<<" 3. Pre-Order Traversal "<<endl;
+       cout<<" 4. Post-Order Traversal "<<endl;
+       cout<<" 5. Removal "<<endl;
+       cout<<" 6. Exit "<<endl;
+       cout<<" Enter your choice : ";
+       cin>>ch;
+       switch(ch)
+       {
+           case 1 : cout<<" Enter Number to be inserted : ";
+                    cin>>tmp;
+                    b.insert(tmp);
+                    break;
+           case 2 : cout<<endl;
+                    cout<<" In-Order Traversal "<<endl;
+                    cout<<" -------------------"<<endl;
+                    b.print_inorder();
+                    break;
+           case 3 : cout<<endl;
+                    cout<<" Pre-Order Traversal "<<endl;
+                    cout<<" -------------------"<<endl;
+                    b.print_preorder();
+                    break;
+           case 4 : cout<<endl;
+                    cout<<" Post-Order Traversal "<<endl;
+                    cout<<" --------------------"<<endl;
+                    b.print_postorder();
+                    break;
+           case 5 : cout<<" Enter data to be deleted : ";
+                    cin>>tmp1;
+                    b.remove(tmp1);
+                    break;
+           case 6 : 
+                    return 0;
+                    
+       }
+    }
+}
diff --git a/MobileRobot/ObjectTrack/bst b/MobileRobot/ObjectTrack/bst
index fbf7dfb48e654c0c3afd4cf0c70a0f624954e816..12384a64476fce3865672035f372e84a1085a6ad 100755
GIT binary patch
literal 13512
zcmb<-^>JfjWMqH=CI&kO5Kn>K0W1U|85kxgg1KPAfx&`-lfi*Oo<W9zje&uIm4Sf)
zrp^J%g3&)fhA}WOz-SJz2@DL(3=9k`3=9kwOb`JJCWr|zS_UG_0HdMCfZYbN4=Rmf
zGe~R>KZs;tfYA&L3Sa?{evn%~$bz{HA7m523>cjOb;k^l!@x2SeIQ|wJ_R|jAcKM&
zL?4Vk05X_?fdNLt{0H(I2#0_SU|?Vff%*?dyFiR%fYBheAfbS#B`F|w4=;$vz|g}B
z2^Sch0}*C`(IB-Tp}?mlDIj-(*u-F%JA<J1;R+W4sQY0w)VmD&IhjdjCi*!kx;dG7
zr4_mr7G}C;CVIvBdPd-Q6<}Zh$CbNZDA+k5V?gecfX2HB10)TA<Wsbl#ju^&IYHk<
zwdThJ<zUWpl3?q&p=N;eF)#=)fRZUl3}m2&>s24o89dG)Ha2{Wfq_8?iv-9u*u+8Z
zg~T|jCV2)}3PKg%io^W5IK*$^5I>7UJQas{JPvVVsQ3pqNP2;})|-KWL6AX;AwdC>
zZUtZwn3I`QT#}NktqqDZGluy1^xXWs_~MepqLTP{hIp^C_@LDE%;J*NBIlgM;^Nd|
zhWIGI;1Y|>{Nnhe#Nt#F&%DeM7em)FhWM!95|iZo(h{(W{G4LfOosTVyz*SIOir<9
zaEYN|az<iNd`VGaW=XMUva4%QaEYODQetsta(sSqNl|KIu4i&cylb#&e1LZ{*c>#Q
zoFO))<OGy4<YXo#LtI@@l$lqO#t<K$T#*=`Sdv<iS;7z>50Z!aBsVcLkHOu?)5$p^
zBHmcf1j3Ft(lgRCWnf@n0+&Oel*r7$1m-a_fFLOCGJ?}DEM1gnPT~NmdjkzvknA1?
zP^yFoluBiCg3S8?;W9jshlDpM?ZS%`1_pRMfXXl)s9G=ujURSsng@$9Ffec+iG%VG
zOk4m-9Ap+uTmnfPWH(G)0ZANW2TWW8NgP%tfaDC2#9?_3ByNEu&IuBLVh1E~E~prY
z@@Rg;@!~N91H+3VMh1o#d)XKmJerSi90tjO@PE@RNd<=gsyUJh4E*vA4F6R@{0xxP
z%Lo7e|NpO=B&ooV0ZO$mFM#<`AU-H4ULFARgFt*x5Wn02=6iwopkndm0x;hR#0Le@
z%L!n<6^IWCnwJe=z7dEI3X+!vV7?ZJ4+@Hx3IG59H+<{ac`?qT^N~mMlMewQp2rU;
z@H#Mf96vaL2SgqB;&xzo(f<Gc|1T3Jfc)yw&DtrUz~Iq(poHoF1+Z5qAcIhk&Zog3
zg$=eJBo!DKO1*ar$R#j%bhEyaRABIEe9Zyk9sJGg(fpdx!}3P4N*ces3n<VIFnV;d
z9t8!K$WgGOZr1G}EtWTm9vx#{EUCc22(m6Z_HbHSnjXJ=3n&a3Jeq9{#1t49K=zgh
z?Er~^+{O{RUqUW{;s1l!!xJWe<UE?+2zYeX{^%_I;?Z3DgQ3)WKd7jF@#f$E|HnbP
z7(9+UfI<aCgE9q!N2lu#k8al=-JxGP1wags;|>ssZjeL(M65G_<FzkHwwuA)^-GNs
zi0RSozyZ>A&7<@9i~9fn|9f;E0*iwbD}Y(u4gzo$u_!9Q#-2Qk)y?c+|GoAE83DGh
zlzj&%<-9hBi`0pOm?$pT`2YX^*P>8igtfE&|NjrQr?d9QYaXZq4w%0|W_Yw7;GcS+
z<v{5pkZdf>RR$iNwKqCTuXr@q-e4%@^yqfI@zR2kfdRw-x$8=uDu@X(p*!?SCpa7q
z!hLzeqcecxB@43pT9|qPxcZ4G>IGh2VStzqGSs8>K&cwk1_2O963pp5{$lT+|NlLX
zyWRlB=*xv@T0oI=!=uyn1z2^rgMde;>kW@?*B798YX0;8|LY>SOzVMCnDP%$K~Ttm
zlz#vz4*@B6hRO(lL^k~cMKmaBxc=w{#o`S}vVpKYx*Y@{0kH$D4wN830RdJBjRt5E
z1*gvvOHhb|J==Nw#a&QffYKsE=dt}YybcWDgz#eh@Bjay%D_(828wCM2@vBzxljWX
zQ69%#Ux32Hqq+7412{TMpa}^S>Mvk+ocRC$e{TdMI6S~%bNt2D|Ns9p-tcHXq7e;`
zdjXH*t{=e0b-RAp2WpLiJU<f@?wzinp!%>6R6c?PTaX1o4I+?WKC+-BD26(ZzlcH>
z1m!}IN>^k-P+bBNG(Z*<gld;Y5(Fvw`|tn%PS-yk-LBxcdiU@D|9$nm4h;K2t%MgZ
zfBpa89r_0n8#TZF|KHaRD)Ksyzc~Nv|9^1ELP8K!W^~s6=`8)xT>FQyRI9P}$N&Ef
z45f<u8x#{5UL=B4gW4mz0u&M$_JPDemS_Ef<*R)l)%!si^u^l$|Nn!Eq6r?IIVv}N
zI#X00c=YOq3o0=9^s0J*sLmXf7e1XODj$40YgB%CbjGM$@MwNx;iLJ~vGcEI=Qodo
zf0;cyufOR2`TxI1>)R3;!`q<x#HaI@Pv<w6&i9W0MecYsA7=Ehd|mp=qdP{0!=pP#
zMZl*!MMc7=J4Z#qr@KT&!>7AO#lWNah{a)k`36udem;y`dPB-eP|D%(=w{s^puphK
z{NsO#<nAA`2@KG3`ZdS@3m)CfAc@kC&=MI^H@x@{avP-fV`N}rP)%Vd&a6sRuu@<E
zB?$&bX=ZCs%?FChFF*eO2bJIzzyAMU!@$6x^ZWn*GYkw2Q-1&d4{C!P`u+bu4<iGE
z^xyygbr=~Kvi|=6@59Kzu<!5x|2d2d3~T=V|KG#NzyK=0*Dx|Lu>Al3{|qAo!xT_e
z#mK+_N^T(kF;)dJFjfdKO7pODOkiYSP+?#I_qj5D{QtiIq<~MrjZeahpSzr+fx%wN
zTFY2P2_y{amx1~&M}GeQzXc@V$S2Uo<jl*)w4R5Z17b!B0|P_EumAr+eqw;jC&T4I
z{#)?t|9?GX{h45Cup5>zFfgq9_5Xh)D2c%IGlwvORDkS1!oa}r{P+L={>b{7yg<@m
z{ZAMe7{vbk{~v-ZAKT1a#KX=3(hn+Pz5e|F{|;H6=_Oph3L^u9#NYq_!7XZ-{ncP;
zu=y^G3=9^3|Nj?7)*k?o2Zdt_BLjoM-~azRLGpn;tZi)Zd=Aa*{Y-t#y(~--e4vaB
ziU&|U&G`HOKd4ayQaXx9Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%%E(h#WN
z0rzGZKttUi3^NbJ24NT<MuWQEAT~M;n)?8WgT^XAbOLnV2|8`bkO7^y1dU*U<YDuy
z(jX3KUIR*h{r5i~#GC=09|aB6gZMv~A?^eX)Pwj3pz`2>63`qX)IqSh3D96QNFBH@
z4q`wtXkq}wd;y)0f%UP$BcKe3aS+f107#uUh+tq~=wOA|4-=1o@<DxekP-tB!N9-(
zn*)K_|L;G<KN3*&|Dk-Cy&s_bKP(XQp~ldhg3VW>TQm(CZ_A+cHYj}zN?(K0&!F@-
zD9r|4A0P&$(am*tcD7Q`2u&)@D=F3Y$;?YE%2zPaGt)EHH7o@SnrcG$3=De3mANH}
zNep_$B}EWA1IEhCD@iRXV9?9UFG<yNbn?_KNlb_G((_97l1ejkQgky@81z8AjKty$
z2ECNZyyD7S2whSHkts_pD$dN$L*c|1G3XVg<|KkNKv@MjB@B9*d6^{)dL^k9B@B9L
znR%HEdPVsui6w~)dZ`)lX+?>-sqq;pMF<{5M|@&YQDP;7UUEr(Q89yF3WUl^E&@9w
zF*h@rK`%YO1Wf3G?SYt?R9wuUmz<xQo0?aG9)x7^LHP@mHDKutww?mE&H^;<g={cL
zEizx3fq?;(=3)9_>lI+@7|`d)K@)Ar`VG<amq7Dv3DiK)xEQi}bp4<)#c%)r=R=h<
zz{-UgPyr37W>`4^%a2fD20sP{22hy*Rn7n_Hx57rK+`ZFwV-kZ<ad~USpE%zu1kO_
zXMmMMKcEE(Xv`3#ABI6@z}O%<j)4JGw!+;H%jbWf9+d(qg07hXF=6(==xhcC22dFS
z<HO1k38;r*r3T3TAT==egUkZqDp1)7p4kTR7#LvXRs>W(tlWZf8DRQh{s)c8f}9F6
z8)O2k9PEH<fR&pdE~xBB*WU-7zXrJvq#sr<BtQjV_JHI-7-ScShGEcHDJV>#${8A<
z<xK-r06ZoQQ;anK4xV`gjgO<*4_n8i07}%L=@6(nFe704VEkEV`eF502DD=1gDHg4
z=<Wx(59EGW_*Fpb!3wB;(3A{RE0{vpzXEDMOh0Vh4{SXUY~2r7Gc>MYY!JN-P5%$5
z{Xd}gF9A6Yq!5Z>@dxEH9AIEz0QnJ`+>zEvK~$itN9Tj)C_q-g^n)fwKstXw*Il89
zH@g1IQ1`?1gJ!xx`Z=KMuL$V}t+PS4A2iDi(k}tkk8U42|2_i)cugD3eptN;TmJ=H
z=LJhfF#Rxhfo2ks?T4)cc>r2Sgw*Z<xe0_}`eF22H2=feEia(@A*)J2Iw2UQ4@Q4O
z)9(RYm*D{|xMA*u=w^WDe;EG{)QvFzgJuLlauHDd8X(Vs1fUoy4COI^*Jy#1z{(kz
z1WdmcOaMxQ)Pk5W8k9d^c7w!WxCv?z7fc~k0*wn^vjfXJP$gh0Kod+cY=D*npyXf#
z^(#mQRxW|sbJ*->099-Z3=AjGB+=~$nS~28GcYp1>SJUzptVP^dKOijnE_URqKdP?
z>qS&?R(O4fD$WM4$56%D8DRAjsyGJ&tlmKt=Y-cMsN!7k_A;tCHv_EvM-}IRm+PqF
zybQ4N8daPR-k(4f=VySGuc+bz@O6`@;(`pY@(@*A2wu*iiVHKq$}d!L5e8Vfgeoq|
z04r}$#l_(3Mp4DZ;p@au#U&VE`5skVk^z>VQN<DK`%uL}twCfF(7HCzDm7jPAGCHm
zDBrO#eEg598ZwW|$bcCRpnS~8fEf-J;PMAE99+R|5?+P^G<&1L>ZKS86d@%WEI(yI
z#VerVu=1?}YR&^Rb8xvI)Sdykp8>jV7v{f-VDkkTX7IyWR1lf@U~x?MuZG%d0Ig3U
zsu>s#g6m++a61V$M~VTo>H(w{<}XnDiHU)i!2;S3huO}-2#FV1{~Xqj)n)|68D@HL
z1RE%Xkv@Z<;;{ZU$Zil$1)GDJ4)Yj6>sv9?RV5>6{VXqo0w=_U;5m8*28Ld+ILJg)
zyby;tX#JHC11|$;)f`9%tZY63R*#wA&x73qQi+Q1;Sm1>HV0KLh{whRazAFd!2=ct
zsX)bsIK%^Rh-X2?LF-$PP3nh=Ba4C9SC~NSa1rGdtljsR3ABb3GyFe*&EaM6gN8qN
z4Fo8yF@wxO<agM5UTKgxlOzLZsSU_J7}fxbi!gu|8N$Rsv?((ve0Ui^%NRj?P`evM
zyF$gkaY5o8ymo?tfgy|;<j#-(BcSaGkXjH<f~sE*RS#Z^!N9;!236ky&A%YEAY2Vq
zzk>r}K6q^i0|P@pR6V-+)4=LMI#KaTusAOR3)CF&8WaWwhP_a6(7H^J4)EFz1_p*h
zU~w$<QF3BV4$|6ZhUB7>;*!#|G`(bo_;}|K|Dbpu&)^WylIVCB6rPtel2l55e0olP
zQesX#xa%LESX#l5oS$2elUkCRqGx7mY{&qTh|f%^0P&0&AR`GWrMbD4Fne76T)@`2
z1v&b<#>03ZYhY}IE#Pqmuq{c&C3?vP1>m*TJ{Ixunfc%mjQA)M!+6jl=#tFjc#ueD
zVoqjNVo7FxUVLI+N_<LcaY<2WGMI0WnaL3E?&I&|=o24bT$&W`86O{I=9yQVT2vBX
z?o?djm!Fb~P~z|A7VH`lAL8ib;~LKp4>lb#{t=&=mx3w)UQf;t?-J?f=<Dgs02=fF
zIjRV>R@~ezGcUzAGY@VB17tb3g9CWMHgu6TXw^A*O*vE;x{e#V$~(EZG#)%k12YvV
zDnWsXbs0No5jmP^5Hm0rxPz9RqbWsSUJjLpITvXuI+_fo>7eEFP(?6rMFp3Tv0@(0
z5KsU3;*yliy!g`MR8WMV1iP6_DkxRLLmjkOAG&}a&6xO<;{5oG#JrT8REBs+>W8I7
z@Dh7a;DeGDLwuA8XdxTiNQU_Mq~c;&lth_(=H(Zqq!uB`gA+=WS#WA%QE~=cJd+_l
W735aP_5n24U`dhS)&1b~#{dAm&jc+1

delta 4006
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

diff --git a/MobileRobot/ObjectTrack/bst.cpp b/MobileRobot/ObjectTrack/bst.cpp
index 841476f1..76906a45 100644
--- a/MobileRobot/ObjectTrack/bst.cpp
+++ b/MobileRobot/ObjectTrack/bst.cpp
@@ -1,5 +1,5 @@
 #include <iostream>
-
+#include <stdio.h>
 using namespace std;
 
 struct BstNode {
@@ -9,52 +9,128 @@ struct BstNode {
         BstNode* right;
 };
 
-BstNode* GetNewNode(int data){
-        BstNode* newNode = new BstNode();
-        newNode->data = data;
-        newNode->left = newNode->right = NULL;
-        return newNode;
+BstNode* Insert(BstNode* node, int inserting_value) {
+        if (node == NULL) { // No node => make a new one! 
+                node = new BstNode();
+                node->data = inserting_value;
+                node->left = node->right = NULL;
+                
+        }  
+        else if (inserting_value <= node->data) {
+                node->left = Insert(node->left,inserting_value);
+        }
+        else {
+                node->right = Insert(node->right,inserting_value);
+        } 
+        
+        return node;
 }
 
-BstNode* Insert(BstNode* root, int data) {
-        if (root == NULL) {
-                root = GetNewNode(data);
-        } else if (data <= root->data) {
-                root->left = Insert(root->left,data);
+
+bool Search(BstNode* node, int target) {
+        if (node == NULL){
+                return false;
+        } else if (target == node->data) { // bingoo, we've got this!
+                return true; 
+        } else if (target < node->data) {
+                return Search(node->left,target);
         } else {
-                root->right = Insert(root->right,data);
+                return Search(node->right,target);
         }
+
+
 }
 
+BstNode* FindMin(BstNode* root) {
+        while(root->left != NULL){
+                root = root->left;
+        }
+        return root;
+}
 
-bool Search(BstNode* root, int data) {
+struct BstNode* Delete(struct BstNode* root, int data) {
         if (root == NULL){
-                return false;
-        } else if (root->data == data) {
-                return true;
-        } else if (data <= root->data) {
-                return Search(root->left,data);
-        } else {
-                return Search(root->right,data);
+                return root;
+        } else if (data < root->data)
+        {
+                root->left = Delete(root->left,data);
+        } else if (data > root->data)
+        {
+                root->right = Delete(root->right,data);
+        } else // found the data to be deleted!
+        {
+                // case 1: No child
+                if (root->left == NULL && root->right == NULL)
+                {
+                        delete root;
+                        root = NULL;
+                }
+                // case 2: One child
+                else if (root->left == NULL)
+                {
+                        struct BstNode *temp = root;
+                        root = root->right;
+                        delete temp;
+                } 
+                else if (root->right == NULL)
+                {
+                        struct BstNode *temp = root;
+                        root = root->left;
+                        delete temp;
+                }
+                // case 3: Two children
+                
+                else 
+                {
+                        struct BstNode *temp = FindMin(root->right);
+                        root->data = temp->data;
+                        root->right = Delete(root->right,temp->data);
+                }
         }
+        
+        return root;
+} 
 
 
+// printing the tree
+void Inorder(BstNode *root) { 
+        if (root == NULL){
+                return;
+        }
+        
+        Inorder(root->left);
+        printf("%d",root->data);
+        Inorder(root->right);
 }
 
 
+int size(BstNode* node) {
+        
+        if (node = NULL) {
+                return 0;
+        } else {
+                return (size(node->left) + 1 /* 1 root */ + size(node->right));   
+        }
+        
+}
+
 int main() {
+        
         BstNode* root; // pointer to root node
         root = NULL; // tree is empty!
         
-        Insert(root,15);
-        Insert(root,10);
-        Insert(root,20);
-        Insert(root,25);
-        Insert(root,8);
-        Insert(root,12);
-        Insert(root,17);
+        root = Insert(root,15);
+        root = Insert(root,10);
+        root = Insert(root,20);
+        root = Insert(root,25);
+        root = Insert(root,8);
+        root = Insert(root,12);
+        root = Insert(root,17);
+        
         
-        int number;
+        
+        
+        /*int number;
         cout << "Please enter a number : \n";
         cin >> number;
         
@@ -62,7 +138,21 @@ int main() {
                 cout << "Found! \n";
         } else {
                 cout << "Not Found! \n";
-        }
+        }*/
+        
+        /*root = Delete(root,15);
+        
+        
+        cout << "Inorder: ";
+        Inorder(root);
+        cout<<"\n";
+        */
+        
+        int num;
+        num = size(root);
         
+        size(root);
+        cout << "size : " << num << "\n";
         
+        return 0;
 }
diff --git a/MobileRobot/ObjectTrack/bst.cpp~ b/MobileRobot/ObjectTrack/bst.cpp~
index 020bcf0e..9e540f55 100644
--- a/MobileRobot/ObjectTrack/bst.cpp~
+++ b/MobileRobot/ObjectTrack/bst.cpp~
@@ -1,5 +1,5 @@
 #include <iostream>
-
+#include <stdio.h>
 using namespace std;
 
 struct BstNode {
@@ -9,60 +9,148 @@ struct BstNode {
         BstNode* right;
 };
 
-BstNode* GetNewNode(int data){
-        BstNode* newNode = new BstNode();
-        newNode->data = data;
-        newNode->left = newNode->right = NULL;
-        return newNode;
+BstNode* Insert(BstNode* node, int inserting_value) {
+        if (node == NULL) { // No node => make a new one! 
+                node = new BstNode();
+                node->data = inserting_value;
+                node->left = node->right = NULL;
+                
+        }  
+        else if (inserting_value <= node->data) {
+                node->left = Insert(node->left,inserting_value);
+        }
+        else {
+                node->right = Insert(node->right,inserting_value);
+        } 
+        
+        return node;
 }
 
-BstNode* Insert(BstNode* root, int data) {
-        if (root == NULL) {
-                root = GetNewNode(data);
-        } else if (data <= root->data) {
-                root->left = Insert(root->left,data);
+
+bool Search(BstNode* node, int target) {
+        if (node == NULL){
+                return false;
+        } else if (target == node->data) { // bingoo, we've got this!
+                return true; 
+        } else if (target < node->data) {
+                return Search(node->left,target);
         } else {
-                root->right = Insert(root->right,data);
+                return Search(node->right,target);
         }
+
+
 }
 
+BstNode* FindMin(BstNode* root) {
+        while(root->left != NULL){
+                root = root->left;
+        }
+        return root;
+}
 
-bool Search(BstNode* root, int data) {
+struct BstNode* Delete(struct BstNode* root, int data) {
         if (root == NULL){
-                return false;
-        } else if (root->data == data) {
-                return true;
-        } else if (data <= root->data) {
-                return Search(root->left,data);
-        } else {
-                return Search(root->right,data);
+                return root;
+        } else if (data < root->data)
+        {
+                root->left = Delete(root->left,data);
+        } else if (data > root->data)
+        {
+                root->right = Delete(root->right,data);
+        } else // found the data to be deleted!
+        {
+                // case 1: No child
+                if (root->left == NULL && root->right == NULL)
+                {
+                        delete root;
+                        root = NULL;
+                }
+                // case 2: One child
+                else if (root->left == NULL)
+                {
+                        struct BstNode *temp = root;
+                        root = root->right;
+                        delete temp;
+                } 
+                else if (root->right == NULL)
+                {
+                        struct BstNode *temp = root;
+                        root = root->left;
+                        delete temp;
+                }
+                // case 3: Two children
+                
+                else 
+                {
+                        struct BstNode *temp = FindMin(root->right);
+                        root->data = temp->data;
+                        root->right = Delete(root->right,temp->data);
+                }
         }
+        
+        return root;
+} 
 
-
+void Inorder(BstNode *root) {
+        if (root == NULL){
+                return;
+        }
+        
+        Inorder(root->left);
+        printf("%d",root->data);
+        Inorder(root->right);
 }
 
 
+int size(BstNode* node) {
+        
+        if (node = NULL) {
+                return 0;
+        } else {
+                return (size(node->left) + 1 /* 1 root */ + size(node->right));   
+        }
+        
+}
+
 int main() {
+        
         BstNode* root; // pointer to root node
         root = NULL; // tree is empty!
         
-        Insert(root,15);
-        Insert(root,10);
-        Insert(root,20);
-        Insert(root,25);
-        Insert(root,8);
-        Insert(root,12);
-        Insert(root,17);
+        root = Insert(root,15);
+        root = Insert(root,10);
+        root = Insert(root,20);
+        root = Insert(root,25);
+        root = Insert(root,8);
+        root = Insert(root,12);
+        root = Insert(root,17);
+        
         
-        int number;
+        
+        
+        /*int number;
         cout << "Please enter a number : \n";
         cin >> number;
         
         if (Search(root,number) == true) {
-                cout << "Found!";
+                cout << "Found! \n";
         } else {
-                cout << "Not Found!";
-        }
+                cout << "Not Found! \n";
+        }*/
+        
+        /*root = Delete(root,15);
+        
+        
+        cout << "Inorder: ";
+        Inorder(root);
+        cout<<"\n";
+        */
+        
+        int num;
+        num = size(root);
         
+        size(root);
+        cout << "size : " << num << "\n";
         
+        return 0;
 }
-- 
GitLab