0
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;
    }
}

问题:

  1. 为什么我需要为tree_node* t分配内存;使用 new 但不用于tree_node* 父级;?

  2. 究竟什么是 tree_node* 它在内存中是什么样子的,它有什么作用?

  3. 有人可以向我解释 -> 运算符及其工作原理吗?

4

1 回答 1

4

为什么我需要为tree_node* t分配内存;使用新的但不用于 tree_node* 父级;?

不需要,但这是逻辑的一部分。t表示您要插入的新节点,因此您需要先创建它(由 完成new)。您不分配内存,parent因为它将引用一个已经存在的节点:

 while(curr)
 {
    parent = curr;
    //...

究竟什么是 tree_node* 它在内存中是什么样子的,它有什么作用?

没办法说(它应该在某个地方定义),但它可能是这样的结构:

struct tree_node
{
    tree_node* left;
    tree_node* right;
    int data;
}

有人可以向我解释 -> 运算符及其工作原理吗?

它用于通过指针访问对象成员。如果有Class* x,那么x->a就相当于(*x).a

于 2012-07-26T23:11:01.870 回答