2012-07-26 118 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