二分木に対してさまざまな操作を実行するプログラムを作成しました。insert()
最初に、null ルート ポインターを設定し、ツリーに新しいノードを追加するいくつかの関数を呼び出します。
最後に、search()
要求された構造ノードを見つけて返す関数を呼び出します。
insert()
関数は、ルート ポインタへの参照と、ノード構造に変換されてツリーに追加される定数 int キーの 2 つのパラメータを取ります。
search()
関数は「定数ルートポインター」を取ります-参照ではありません。ローカルポインターを直接操作したいので、これを変更したくないからです。それが取る他の引数は int キーです。
これはプログラム全体です:
#include <iostream>
struct node
{
node *p; // parent
node *left, *right;
int key;
};
void insert(node *&root, const int key)
{
node newElement = {};
newElement.key = key;
node *y = NULL;
while(root)
{
if(key == root->key) exit(EXIT_FAILURE);
y = root;
root = (key < root->key) ? root->left : root->right;
}
newElement.p = y;
if(!y) root = &newElement;
else if(key < y->key) y->left = &newElement;
else y->right = &newElement;
}
node* search(const node *root, const int key)
{
while( (root) && (root->key != key) )
root = (key < root->key) ? root->left : root->right;
return root;
}
int main()
{
using namespace std;
node *root = NULL;
insert(root, 5);
insert(root, 2);
cout << search(root, 5)->key << endl;
return 0;
}
私の質問は -検索機能が機能しないのはなぜですか? エラーが表示されます - 戻り値の型が関数の型と一致しません。しかし、宣言にあるように、ポインタを返します!
また、"const"
ここのキーワードは大丈夫ですか?