二叉树C ++基础知识

时间:2012-07-26 23:03:48

标签: c++

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 * parent;

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

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

1 个答案:

答案 0 :(得分:4)

  

为什么我需要为tree_node * t分配内存;使用new但不是tree_node * parent;?

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

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

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

没办法告诉(它应该在某处定义),但它可能是这样的结构:

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

有人可以向我解释 - &gt;运算符及其工作原理?

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