X
xkenneth
All,
Thanks to anyone who reads this. I am trying to implement a basic
dictionary class using a binary tree. That information is fairly
unimportant as I'm simply trying to use references to contain the node
data. When i create my tree, create it's root node, and then try to
return the data, it comes back as either garbled or the wrong data. I
have attached all of my code, any help is appreciated.
binNode.h
----------------
#ifndef BINNODE_H
#define BINNODE_H
class binNode
{ public:
binNode(binNode* left,float& item,binNode* right);
void setLeftChild(binNode* aChild);
void setRightChild(binNode* aChild);
binNode* left() const; // left child
binNode* right() const; // right child
float& nodeData() const; // current node data
private:
binNode* lchild;
float& data;
binNode* rchild;
};
#endif
-------------------
binNode.cc
-------------------
#include <iostream>
#include "binNode.h"
binNode::binNode(binNode* left,float& item,binNode* right) : data(0) {
if (left!=0) {
lchild = left;
} else {
lchild = 0;
}
if (right!=0) {
rchild = right;
} else {
rchild = 0;
}
data = item;
cout << "!" << data << endl;
cout << item << endl;
return;
}
void binNode::setLeftChild(binNode* aChild) {
if (aChild!=0) {
lchild = aChild;
}
return;
}
void binNode::setRightChild(binNode* aChild) {
if (aChild!=0) {
rchild = aChild;
}
return;
}
binNode* binNode::left() const {
return lchild;
}
binNode* binNode::right() const {
return rchild;
}
float& binNode::nodeData() const {
cout << "!!" << data << endl;
return data;
}
-------------------------
dict.h
-------------------------
#ifndef DICT_H
#define DICT_H
#include "binNode.h"
class dict
{ public:
dict();
~dict();
void insert(float& obj);
float& remove(const float& key);
float& search(const float& key) const;
void inorder() const;
private:
binNode* root;
};
#endif
-------------------------
dict.cc
-------------------------
#include "dict.h"
#include <iostream>
dict::dict() {
root = 0;
return;
}
dict::~dict() {
return;
}
void dict::insert(float& obj) {
float val = 0;
float& ref = val;
if (root==0) {
cout << "Creating root with value: " << obj << endl;
root = new binNode(0,obj,0);
ref = root->nodeData();
cout << "After creation: " << &ref << endl;
} else {
cout << "Need to create a child!" << endl;
if(root->nodeData()>=obj) {
cout << "Bigger than or equal to" << endl;
} else {
cout << "Less than" << endl;
}
}
return;
}
float& dict::remove(const float& key) {
return 0.0;
}
float& dict::search(const float& key) const {
return 0.0;
}
void dict::inorder() const {
cout << "Address: " << root << endl;
cout << root->nodeData();
return;
}
--------------------
main.cc
--------------------
#include "dict.h"
#include <iostream>
void main(void) {
float value1 = 5.0;
dict *myDict;
myDict = new dict();
myDict->insert(value1);
return;
}
--------------------
Output
--------------------
Creating root with value: 5 <- creation statement
!5 <- Value of the class private variable after creation
5 <-Value of the argument passed to the function
!!1.08526e-19 <-value when attempted to return by root->nodeData();
After creation: 0x11fffbfc8 <-Address of the reference, i was trying
to compare them
--------------------
Once again,
any help is appreciated.
Thanks,
Ken
Thanks to anyone who reads this. I am trying to implement a basic
dictionary class using a binary tree. That information is fairly
unimportant as I'm simply trying to use references to contain the node
data. When i create my tree, create it's root node, and then try to
return the data, it comes back as either garbled or the wrong data. I
have attached all of my code, any help is appreciated.
binNode.h
----------------
#ifndef BINNODE_H
#define BINNODE_H
class binNode
{ public:
binNode(binNode* left,float& item,binNode* right);
void setLeftChild(binNode* aChild);
void setRightChild(binNode* aChild);
binNode* left() const; // left child
binNode* right() const; // right child
float& nodeData() const; // current node data
private:
binNode* lchild;
float& data;
binNode* rchild;
};
#endif
-------------------
binNode.cc
-------------------
#include <iostream>
#include "binNode.h"
binNode::binNode(binNode* left,float& item,binNode* right) : data(0) {
if (left!=0) {
lchild = left;
} else {
lchild = 0;
}
if (right!=0) {
rchild = right;
} else {
rchild = 0;
}
data = item;
cout << "!" << data << endl;
cout << item << endl;
return;
}
void binNode::setLeftChild(binNode* aChild) {
if (aChild!=0) {
lchild = aChild;
}
return;
}
void binNode::setRightChild(binNode* aChild) {
if (aChild!=0) {
rchild = aChild;
}
return;
}
binNode* binNode::left() const {
return lchild;
}
binNode* binNode::right() const {
return rchild;
}
float& binNode::nodeData() const {
cout << "!!" << data << endl;
return data;
}
-------------------------
dict.h
-------------------------
#ifndef DICT_H
#define DICT_H
#include "binNode.h"
class dict
{ public:
dict();
~dict();
void insert(float& obj);
float& remove(const float& key);
float& search(const float& key) const;
void inorder() const;
private:
binNode* root;
};
#endif
-------------------------
dict.cc
-------------------------
#include "dict.h"
#include <iostream>
dict::dict() {
root = 0;
return;
}
dict::~dict() {
return;
}
void dict::insert(float& obj) {
float val = 0;
float& ref = val;
if (root==0) {
cout << "Creating root with value: " << obj << endl;
root = new binNode(0,obj,0);
ref = root->nodeData();
cout << "After creation: " << &ref << endl;
} else {
cout << "Need to create a child!" << endl;
if(root->nodeData()>=obj) {
cout << "Bigger than or equal to" << endl;
} else {
cout << "Less than" << endl;
}
}
return;
}
float& dict::remove(const float& key) {
return 0.0;
}
float& dict::search(const float& key) const {
return 0.0;
}
void dict::inorder() const {
cout << "Address: " << root << endl;
cout << root->nodeData();
return;
}
--------------------
main.cc
--------------------
#include "dict.h"
#include <iostream>
void main(void) {
float value1 = 5.0;
dict *myDict;
myDict = new dict();
myDict->insert(value1);
return;
}
--------------------
Output
--------------------
Creating root with value: 5 <- creation statement
!5 <- Value of the class private variable after creation
5 <-Value of the argument passed to the function
!!1.08526e-19 <-value when attempted to return by root->nodeData();
After creation: 0x11fffbfc8 <-Address of the reference, i was trying
to compare them
--------------------
Once again,
any help is appreciated.
Thanks,
Ken