私は、バイナリ検索ツリーに挿入する機能を構築しようとしているが、私はそれが動作しない理由を考え出す苦労しています。関数がどのように動作するのか基本的に理解していますが、与えられたテンプレートに基づいて、BSTクラスの作成を避け、代わりにNodeクラスに依存し、それを処理する目的の関数を構築するようです。ここで指定したテンプレートです:C++のバイナリ検索ツリーを挿入実装
#include <iostream>
#include <cstddef>
using std::cout;
using std::endl;
class Node {
int value;
public:
Node* left; // left child
Node* right; // right child
Node* p; // parent
Node(int data) {
value = data;
left = NULL;
right = NULL;
p = NULL;
}
~Node() {
}
int d() {
return value;
}
void print() {
std::cout << value << std::endl;
}
};
function insert(Node *insert_node, Node *tree_root){
//Your code here
}
私がいる問題は、私がのgetValueがノードのための単純なgetterメソッドで次のコードを実装するときです:
int main(int argc, const char * argv[]) {
Node* root = NULL;
Node* a = new Node(2);
insert(a, root);
}
void insert(Node *insert_node, Node *tree_root){
if (tree_root == NULL)
tree_root = new Node(insert_node->getValue());
コードをコンパイルして実行するように見えますこの後にrootでもう一度チェックを実行すると、NULLが返されます。私がここで何を欠いているのか? rootをinsert_nodeのノードと等しい新しいノードに置き換えないのはなぜですか?
また、私は、これはBSTを実装するための最適な方法ではありませんが、私は私に与えられたテンプレートで動作するようにしようとしています実現。アドバイスをいただければ幸いです。
*引数をC++で参照渡しで検索する方法については、こちらを参照してください。 –
'void insert(ノード* insert_node、Node *&tree_root)'です。 – Jarod42
さらに良い 'のボイド挿入(STD :: unique_ptrを insert_node、STD :: unique_ptrを&tree_root)'。 –
Jarod42