【发布时间】:2020-05-03 08:34:56
【问题描述】:
The code showed in Visual StudioInsertBSTNode 函数错误。但我不知道如何解决它。要求是不要改变函数的类型。
树节点
class TreeNode{
public:
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int x): data(x), left(NULL), right(NULL){}
};
插入BST节点
void InsertBSTNode(TreeNode* &root, int val){
// Input your code here.
if (root==NULL){
root->data=val;
root->left=root->right=NULL;}
else if(val<root->data)
root->left=InsertBSTNode(root->left,val);//error
else if(val>root->data)
root->right=InsertBSTNode(root->right,val);//error
return root;//error
};
【问题讨论】:
-
很简单,你把你的函数写成
void InsertBSTNode(...)void函数没有返回值。但是在你的代码中你确实有一个返回值,因为你说return root;。要么编写一个不返回值的函数,要么将void替换为函数的返回类型。您的选择。 -
问题是在需要递归时如何写一个没有返回的函数。
-
Recusrive 函数不必有返回类型。这不是你递归调用函数的问题。如果你想要一个 void recusive 函数,那么只需修复三个错误,删除
root->left=、root->right=和return root; -
顺便说一句,这是一个明显的错误
if (root==NULL){ root->data=val; root->left=root->right=NULL;}你正在取消引用一个 NULL 指针。 -
感谢您的指正,但如果我删除所有这些,插入仍然不起作用。
标签: c++ data-structures binary-search-tree