ノードキーに対応する値が見つかったら、そのノードを呼び出された場所に戻すだけです。私cout
文に基づいてどのようにして再帰アルゴリズムからノードを返すことができますか?
MovieNode *found = searchRecursive(root, title);
、それが発見されたばかりですが、私はmain()
に戻ってそれを印刷するとき、私はちんぷんかんぷんを取得しています。興味深いことに、ノードがmain()
に印刷されているときにはヌルではありませんが、疑問符のアイコンは何度も何回か印刷されています。機能
return nullptr;
の終わりに
auto* r = searchRecusive(...)
if (r) return r;
ので、あなたが得る::他のいくつかのと
MovieNode* MovieTree::searchRecursive(MovieNode* node, std::string const& value) {
if(node->left != nullptr) {
auto* r = searchRecursive(node->left, value);
if (r) return r;
}
if(node->title == value){ //in order
std::cout<<"found\n";
std::cout<<node->title<<std::endl;
return node;
}
if(node->right != nullptr) {
auto* r = searchRecursive(node->right, value);
if (r) return r;
}
return nullptr;
}
をだけではなくsearchRecursive(...)
これを行う呼び出しの
struct MovieNode{
int ranking;
std::string title;
int year;
int quantity;
MovieNode *parent;
MovieNode *left;
MovieNode *right;
MovieNode(){};
MovieNode(int in_ranking, std::string in_title, int in_year, int in_quantity)
{
ranking = in_ranking;
title = in_title;
year = in_year;
quantity = in_quantity;
parent = NULL;
left = NULL;
right = NULL;
}
};
MovieNode* MovieTree:: searchRecursive(MovieNode *node, std::string value)
{
if(node->left != NULL){
searchRecursive(node->left, value);
}
if(node->title == value){ //in order
cout<<"found"<<endl;
cout<<node->title<<endl;
return node;
}
if(node->right != NULL){
searchRecursive(node->right, value);
}
}
無料の手掛かり:どのような機能から何かをどうやって返すのですか?再帰関数については忘れてください。私たちは何らかの機能について話しており、どのようにして関数を返すのかについて話しています。再帰関数については特別なことも魔法もありません。それらは、非再帰関数*が何かを返すものと全く同じように何かを返します。だから、あなたは関数から何かを返すでしょうか?この質問に答えると、どのように関数から何かを返す*あなたはあなたが逃しているものを把握することができます。 –
それが返品を追加するという私の嫌な呼びかけだった場合、それはifステートメントの中にあります。 – user7554736
ifステートメントでは、これはリストを一番左のアイテムにトラバースするだけでなく、そのアイテムがあなたの望む値でない場合は、毎回繰り返されるほとんどの左から左のリスト項目の間を行き来します。 – Tuffwer