0

最近我开始玩 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 方法时,会向树中添加一个节点,但是当我想打印出存储在根中的节点的名称时,它只会出现垃圾。我想某处有一个混乱的指针,但我一辈子都找不到它。

任何帮助将不胜感激。

4

2 回答 2

0

当 root 为空时,您将其设置为城市而不是节点。有你的问题。

于 2013-02-18T18:44:47.480 回答
0

我猜你正在传递一个字符串指针名称setName并只是将指针复制到name(而不是重新分配和保存字符串)。后来,原来的对象不见​​了,你的对象name就剩下指向垃圾了。尝试使用 std::stringname代替,或者使用 strcpy/memcpy 创建自己的内存name = new char[ strlen(n) + 1 ]。如果你走那条路,不要忘记delete [] name对象销毁。

于 2013-02-18T18:48:05.583 回答