afc83b06f97ba7704a514122d1661abcdb97c478.svn-base (1688B)
1 #include "BinaryTree.h" 2 3 bool Node::Insert(int i, void* data) 4 { 5 if (mActive == false) 6 { 7 PopulateNode(i, data); 8 } 9 else //mActive == true 10 { 11 if (i < mItem) { mLeft->Insert(i, data); } 12 else if (mItem < i) { mRight->Insert(i, data); } 13 else// i==mItem this should never happen 14 { 15 //error 16 return false; 17 } 18 } 19 return true; 20 } 21 22 Node* Node::Search(int i) 23 { 24 if (mActive == false)// target value not found 25 { 26 return NULL; 27 } 28 if (i < mItem) { return mLeft->Search(i); } 29 else if (mItem < i) { return mRight->Search(i); } 30 else// i==mItem 31 { 32 return this; 33 } 34 } 35 36 bool Node::InsertNode(Node* n) 37 { 38 n->mActive = false; 39 if (mActive == false) 40 { 41 mActive = true; 42 43 mItem = n->mItem; 44 mData = n->GetData(); 45 46 if (n->mLeft->IsActive()) { InsertNodeAtRoot(n->mLeft); } 47 if (n->mRight->IsActive()) { InsertNodeAtRoot(n->mRight); } 48 49 return true; 50 } 51 else //mActive == true 52 { 53 if (n->mItem < mItem) { mLeft->InsertNode(n); } 54 else if (mItem < n->mItem) { mRight->InsertNode(n); } 55 else// i==mItem this should never happen 56 { 57 //error 58 return false; 59 } 60 return true; 61 } 62 } 63 64 bool Node::InsertNodeAtRoot(Node* n) 65 { 66 n->mActive = false; 67 if (mParent != NULL) 68 { 69 return mParent->InsertNodeAtRoot(n); 70 } 71 else 72 { 73 bool r = InsertNode(n); 74 //n->Delete(); 75 return r; 76 } 77 } 78 79 void Node::Delete() 80 { 81 mActive = false; 82 83 InsertNodeAtRoot(mLeft); 84 InsertNodeAtRoot(mRight); 85 } 86 87 bool Node::DisableTree() 88 { 89 return false; 90 } 91 92 void Node::PopulateNode(int item, void* data) //Should only be called by inactive nodes 93 { 94 if (mActive == false) 95 { 96 mItem = item; 97 mData = data; 98 99 mLeft = new Node(this); 100 mRight = new Node(this); 101 102 mActive = true; 103 } 104 else 105 { 106 //error 107 } 108 }