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; にメモリを割り当てる必要があるのはなぜですか。new を使用するが、tree_node* 親には使用しない;?

必要はありませんが、これはロジックの一部です。t挿入する新しいノードを表すため、最初に作成する必要があります (これは によって行われますnew)。parent既存のノードを参照するため、メモリを割り当てません。

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

tree_node* とは正確には何ですか? メモリ内ではどのように見え、何をしますか?

わかりませんが (どこかで定義する必要があります)、おそらく次のような構造です。

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

誰かが私に -> 演算子とその仕組みを説明できますか?

これは、ポインターを介してオブジェクト メンバーにアクセスするためのものです。がある場合Class* xx->aは と同等(*x).aです。

于 2012-07-26T23:11:01.870 に答える