我是编程新手,我正在尝试插入二进制搜索树程序。我的代码是:
struct Node* insert(struct Node* node, int key)
{
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
if (key > node->key)
node->right = insert(node->right, key);
return node;
}
但它没有产生正确的输出。给出的解决方案是:
struct Node* insert(struct Node* node, int key)
{
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
else if (key > node->key)
node->right = insert(node->right, key);
return node;
}
else
如何影响插入?
答案 0 :(得分:0)
首先,要摆脱这些问题,请始终自行运行代码。
struct Node* insert(struct Node* node, int key)
{
if (node == NULL) return newNode(key);
if (key < node->key) // Stmt 1
node->left = insert(node->left, key);
if (key > node->key) //Stmt 2
node->right = insert(node->right, key);
return node;
}
这里你需要正确理解递归。在您的代码中,编译器将同时使用stmt1和stmt2。
假设编译器对递归左节点执行stmt1
3次递归,则每次对每个右节点执行stmt2
。但是如果您在else
中使用stmt2
,那么您的代码将不会为stmt1的递归部分执行stmt2
。如果您使用stmt1
,它只会执行stmt2
或else
中的一个。