最近我開始玩弄C++,即類和指針。我環顧四周尋找類似的問題,但沒有任何幫助。C++二叉搜索樹
我有一個二進制搜索樹類,它以字符串格式(好,char *)保存一些信息,但是在向樹添加一個新節點後,我無法獲取信息,因爲它返回垃圾。
這裏是我的代碼如下所示:
class Node
{
Node *lNode;
Node *rNode;
char *name;
public:
void setName(char *n) { name = n; }
char *getName() { return name; }
}
class Tree
{
Node *root;
Node *addNode(Node *, Node *);
public:
Tree() { root = NULL };
int addNewNode(Node *);
void print();
};
int Tree::addNewNode(Node *n)
{
root = addNode(root, n);
cout << root->getName() << endl; // this returns the name correctly
}
Node *Tree::addNode(Node *subtree, Node *node)
{
if(subtree== NULL)
{
subtree = node;
}
else if(node->getName() <= subtree->getLeft())
{
subtree->setLeft(addNode(subtree->getLeft(), node));
}
else
{
subtree->setRight(addNode(subtree->getRight(), node));
}
return subtree;
}
void Tree::print()
{
cout << root->getName() << endl; // this does not!
}
而這正是我所說的方法:
Tree *myTree = new Tree();
Node *n = new Node();
n->setName(name);
myTree->addNewNode(n);
樹變量是外部容器類的私有成員屬性,實際上是在該類之外創建的,並傳遞給構造函數。當我調用addNewNode方法時,它向樹添加了一個節點,但是當我想打印出存儲在根節點中的節點的名稱時,它只是出現垃圾。我想這裏有一個干擾指針,但是我無法在我的生活中找到它。
任何幫助將不勝感激。
爲什麼不使用'std :: map'或'std :: set'? – 2013-02-18 18:40:10
請勿用與您的成員相同的名稱命名參數。你會犯這樣的錯誤...... – 2013-02-18 18:41:30
這對我來說很愚蠢。將其更改爲'子樹',但仍然相同。 – straphe 2013-02-18 18:42:37