0

挿入するノードの値と BST のルートを指定して、バイナリ検索ツリーにノードを追加する単純な C++ 関数を実装しようとしています。
驚いたことに、私はどの要素もプッシュできません。ノードを挿入するステートメントがコンパイラによって入力されていることを確認しましたが、ツリーには追加しようとしているノードがありませんでした。問題は、関数の引数でノードを渡す方法にあると思います。誰でも助けることができますか?ありがとうございました。これが私の Node タイプと関数の実装です。

 struct Node{

    int value;
    Node *left;
    Node *right;
    };

    //this method adds a new node with value v to Binary Search Tree
    // node is initially the root of the tree
    void Push_To_BST(Node* node,int v)
    {

    // the right place to add the node
    if(node==NULL)
    {

    node=new Node();
    node->value= v;
    node->left= NULL;
    node->right=NULL;

    }

    //the value to be added is less than or equal the reached node
    else if(v <= node->value)
        {
    //adding the value to the left subtree
    Push_To_BST(node->left,v);
    }

    //the value to be added is greater than the reached node
    else if(v > node->value)
    {
    //adding the value to the right subtree
    Push_To_BST(node->right,v);
    }

    }
4

2 に答える 2

1

参照には注意してください。

void Push_To_BST(Node* node,int v) 
{ 

// the right place to add the node 
if(node==NULL) 
{  
    node=new Node(); 
    // etc

nodeメモリを割り当てているのはローカル変数です。新しく作成されたノードへのポインタをNode**渡すには、 a を渡す必要があります。

例:

void Push_To_BST(Node** pnode,int v) 
{ 
    Node* node = *pnode;

    // the right place to add the node 
    if(node==NULL) 
    {  
        node=new Node(); 
        // etc
    }
    else if(v < node->value)  
    {  
        //adding the value to the left subtree  
        Push_To_BST(&node->left,v);  
    }  
    // etc

そしてそれを次のように呼び出します

Node* n = new Node;
Push_To_BST(&n, 2);
于 2012-06-15T16:53:44.530 に答える
0

新しいノードを割り当てて入力しますが、既存のノードのポインターを新しいノードを指すように変更することはありません。

于 2012-06-15T16:55:50.490 に答える