1

この質問は二分探索木に関連しています。これが私が使用しているノードの定義です

struct _Node
{
    _Node *Parent;
    int Data;
    _Node *Left;
    _Node *Right;
};

ルートが作成されたらノードを追加する関数の定義を次に示します。

void AddNode(_Node *Incoming, _Node *currentNode)
{

            if(!currentNode)
            {
                currentNode = Incoming;
            }
            else if(currentNode->Data >= Incoming->Data)
            {
                Incoming->Parent = currentNode;
                AddNode(Incoming, currentNode->Left);
            }
            else if(currentNode->Data < Incoming->Data)
            {
                Incoming->Parent = currentNode;
                AddNode(Incoming, currentNode->Right);
            }

}

AddNode 関数は、再帰的アプローチに基づいています。メインコードは

_Node *Root= new _Node;
Root->Data = 50;
Root->Parent = nullptr;
Root->Left = nullptr;
Root->Right = nullptr;


_Node *Node2 = new _Node;
Node2->Data = 25;
Node2->Parent = nullptr;
Node2->Left = nullptr;
Node2->Right = nullptr;
_Node *Node3 = new _Node;

   AddNode(Node2, Root);

問題: ノード追加機能を終了すると、ルート ノードに Node2 に設定された Left または Right Child がないことがわかりました。私によると、ノードへのポインターが渡されるたびに、ノードをルートに正しく追加する必要がありました。これは起こっていません。私が犯している間違いを理解するために、ここで私を助けてくれませんか?

4

1 に答える 1

0

試す

AddNode(Incoming, currentNode->Left);

それ以外の

AddNode(Incoming, Incoming->Left);

についても同じですRight

于 2012-08-12T19:03:20.550 に答える