数据=数据; 此->左=空; 此->右=空; } ~BstNode(); 无效插入(整型数据) { 如果(此->数据>=数据) { 如果(此->左==NULL) 此->左=新节点(数据); 其他的 此->左->插入(数据); } 其他的 { 如果(此->右==NULL) 此->右=新节点(数据); 其他的 此->右->插入(数据); } } 布尔搜索(整数数据) { 如果(此->数据==数据) 返回true; 否则如果(此->数据>=数据) { 如果(此->左==NULL) 返回false; 其他的 此->左->搜索(数据); } 其他的 { 如果(此->右==NULL) 返回false; 其他的 此->右->搜索(数据); } } }; int main() { BstNode*ptr_root=新的BstNode(15); ptr_根->插入(10); ptr_根->插入(16); int-num; std::cout num; 如果(ptr_根->搜索(num)) std::cout,c++,class,recursion,binary-search-tree,function-definition,C++,Class,Recursion,Binary Search Tree,Function Definition" /> 数据=数据; 此->左=空; 此->右=空; } ~BstNode(); 无效插入(整型数据) { 如果(此->数据>=数据) { 如果(此->左==NULL) 此->左=新节点(数据); 其他的 此->左->插入(数据); } 其他的 { 如果(此->右==NULL) 此->右=新节点(数据); 其他的 此->右->插入(数据); } } 布尔搜索(整数数据) { 如果(此->数据==数据) 返回true; 否则如果(此->数据>=数据) { 如果(此->左==NULL) 返回false; 其他的 此->左->搜索(数据); } 其他的 { 如果(此->右==NULL) 返回false; 其他的 此->右->搜索(数据); } } }; int main() { BstNode*ptr_root=新的BstNode(15); ptr_根->插入(10); ptr_根->插入(16); int-num; std::cout num; 如果(ptr_根->搜索(num)) std::cout,c++,class,recursion,binary-search-tree,function-definition,C++,Class,Recursion,Binary Search Tree,Function Definition" />

如何在这个简单的BST递归实现中消除警告 我尝试在C++中实现DSS,这里是一个简单的实现了具有插入和搜索功能的二叉搜索树类。代码根据需要编译并提供输出。 codereview的一些人指出,搜索功能会发出警告,搜索功能中的代码被破坏。警告类似于“并非所有控制路径都有返回语句”,但我认为递归函数就是这样的。警告是一个问题吗?我如何消除它?另外,代码是如何被破坏的?多谢各位 #include <stdio.h> #include <iostream> class BstNode{ int data; BstNode* left; BstNode* right; public: BstNode(int data) { this->data = data; this->left = NULL; this->right = NULL; } ~BstNode(); void Insert(int data) { if(this->data >= data) { if (this->left == NULL) this->left = new BstNode(data); else this->left->Insert(data); } else { if (this->right == NULL) this->right = new BstNode(data); else this->right->Insert(data); } } bool Search(int data) { if(this->data == data) return true; else if(this->data >= data) { if(this->left == NULL) return false; else this->left->Search(data); } else { if(this->right == NULL) return false; else this->right->Search(data); } } }; int main() { BstNode* ptr_root = new BstNode(15); ptr_root->Insert(10); ptr_root->Insert(16); int num; std::cout<<"Enter the number: \n"; std::cin>> num; if (ptr_root->Search(num)) std::cout<<"Found\n"; else std::cout<<"Not Found\n"; return 0; } #包括 #包括 类节点{ int数据; 节点*左; 节点*对; 公众: BstNode(int数据) { 这->数据=数据; 此->左=空; 此->右=空; } ~BstNode(); 无效插入(整型数据) { 如果(此->数据>=数据) { 如果(此->左==NULL) 此->左=新节点(数据); 其他的 此->左->插入(数据); } 其他的 { 如果(此->右==NULL) 此->右=新节点(数据); 其他的 此->右->插入(数据); } } 布尔搜索(整数数据) { 如果(此->数据==数据) 返回true; 否则如果(此->数据>=数据) { 如果(此->左==NULL) 返回false; 其他的 此->左->搜索(数据); } 其他的 { 如果(此->右==NULL) 返回false; 其他的 此->右->搜索(数据); } } }; int main() { BstNode*ptr_root=新的BstNode(15); ptr_根->插入(10); ptr_根->插入(16); int-num; std::cout num; 如果(ptr_根->搜索(num)) std::cout

如何在这个简单的BST递归实现中消除警告 我尝试在C++中实现DSS,这里是一个简单的实现了具有插入和搜索功能的二叉搜索树类。代码根据需要编译并提供输出。 codereview的一些人指出,搜索功能会发出警告,搜索功能中的代码被破坏。警告类似于“并非所有控制路径都有返回语句”,但我认为递归函数就是这样的。警告是一个问题吗?我如何消除它?另外,代码是如何被破坏的?多谢各位 #include <stdio.h> #include <iostream> class BstNode{ int data; BstNode* left; BstNode* right; public: BstNode(int data) { this->data = data; this->left = NULL; this->right = NULL; } ~BstNode(); void Insert(int data) { if(this->data >= data) { if (this->left == NULL) this->left = new BstNode(data); else this->left->Insert(data); } else { if (this->right == NULL) this->right = new BstNode(data); else this->right->Insert(data); } } bool Search(int data) { if(this->data == data) return true; else if(this->data >= data) { if(this->left == NULL) return false; else this->left->Search(data); } else { if(this->right == NULL) return false; else this->right->Search(data); } } }; int main() { BstNode* ptr_root = new BstNode(15); ptr_root->Insert(10); ptr_root->Insert(16); int num; std::cout<<"Enter the number: \n"; std::cin>> num; if (ptr_root->Search(num)) std::cout<<"Found\n"; else std::cout<<"Not Found\n"; return 0; } #包括 #包括 类节点{ int数据; 节点*左; 节点*对; 公众: BstNode(int数据) { 这->数据=数据; 此->左=空; 此->右=空; } ~BstNode(); 无效插入(整型数据) { 如果(此->数据>=数据) { 如果(此->左==NULL) 此->左=新节点(数据); 其他的 此->左->插入(数据); } 其他的 { 如果(此->右==NULL) 此->右=新节点(数据); 其他的 此->右->插入(数据); } } 布尔搜索(整数数据) { 如果(此->数据==数据) 返回true; 否则如果(此->数据>=数据) { 如果(此->左==NULL) 返回false; 其他的 此->左->搜索(数据); } 其他的 { 如果(此->右==NULL) 返回false; 其他的 此->右->搜索(数据); } } }; int main() { BstNode*ptr_root=新的BstNode(15); ptr_根->插入(10); ptr_根->插入(16); int-num; std::cout num; 如果(ptr_根->搜索(num)) std::cout,c++,class,recursion,binary-search-tree,function-definition,C++,Class,Recursion,Binary Search Tree,Function Definition,此函数搜索在这些路径中不返回任何内容 else this->left->Search(data); 及 你必须写作 else return this->left->Search(data); 及 该函数可以通过以下方式使用单个return语句定义 bool Search( int data ) const { return ( this->data == data ) || ( th

此函数搜索在这些路径中不返回任何内容

    else
        this->left->Search(data);

你必须写作

    else
        return this->left->Search(data);

该函数可以通过以下方式使用单个return语句定义

bool Search( int data ) const
{
    return ( this->data == data ) || 
           ( this->data >= data ? this->left  && this->left->Search( data )
                                : this->right && this->right->Search( data ) );    
}
实际情况

this->data >= data
可以代替

this->data > data

此->左->搜索(数据);
->
返回此->左->搜索(数据);
.A
return
只终止当前函数调用。如果递归调用函数,它仍然一次只终止一个调用。明白了,谢谢HolyBlackCat。谢谢你,弗拉德,我知道所有路径都需要返回。但是如果代码与我帖子中的原始代码一样,会发生什么?它仍然是gives搜索的输出正确。@Nothing_8484有未定义的行为。它似乎有效,因为结果返回到同一寄存器中。
this->data >= data
this->data > data