我正在尝试在二叉搜索树中实现插入。根据我的逻辑,递归和迭代都执行非常相似的任务 - 但是,我的递归函数有效,但我的迭代解决方案并不适用。执行有什么区别?为什么迭代功能不起作用? (忽略不同的返回类型)
发生的错误是在迭代的情况下,只有一个元素被正确插入。连续插入不起作用。
班级定义:
class Node
{
public:
Node(int x, Node *l = NULL, Node *r = NULL)
{
val = x;
left = l;
right = r;
}
int val;
Node *left;
Node *right;
};
迭代:
Node* insert(Node* &root, int x)
{
Node* newNode = new Node(x);
if (root == NULL)
{
root = newNode;
return root;
}
else
{
Node* travNode = root;
while (travNode != NULL)
{
if (x < travNode->val)
travNode = travNode->left;
else
travNode = travNode->right;
}
travNode = newNode;
}
return root;
}
递归:
void insert(Node* &root, int x)
{
if (root == NULL)
{
Node* newNode = new Node(x);
root = newNode;
}
else
{
if (x < root->val)
insert(root->left, x);
else
insert(root->right, x);
}
}
谢谢!
答案 0 :(得分:1)
在递归中,当您调用insert()时,整个函数都会执行。
在迭代解决方案中,您会找到一个节点,该节点将成为新节点的父节点,但您使用新节点覆盖该节点,而不是将其设置为子节点。
您需要在某个地方travNode->left = newNode
或travNode->right = newNode
。