2012-07-26 121 views
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; 
    } 
} 

问题:二叉树的C++基础

  1. 为什么我需要为tree_node * T分配内存;使用新的但不适用于tree_node * parent;

  2. tree_node究竟是什么*它在内存中看起来像什么,它有什么作用?

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

+0

tree_node * t被用作新节点,即将被插入的节点,而parent只是用于在处理期间存储父节点的临时存储变量。 ' - >'操作符是一个访问器,因此您可以将数据存储在对象中。至于tree_node究竟是什么?这可能是专门为此树实现而创建的自定义数据类型。你必须仔细查看你的来源。 – TheZ 2012-07-26 23:05:58

+0

' - >'和其他语言中的'.'意思相同;它引用一个对象的成员。所以'parent-> right'表示父对象中的'right'成员。 – 2012-07-26 23:08:23

+0

@RobertHarvey好...父母不是一个对象,而是一个指针。 – 2012-07-26 23:11:38

回答

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

能有人向我解释 - >运算符,它是如何工作的?

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