二进制搜索树插入中迭代和递归的区别
Difference between iteration and recursion in binary search tree insertion
我正在尝试在二进制搜索树中实现插入。根据我的逻辑,递归和迭代都在执行非常相似的任务——然而,我的递归函数有效,但迭代解决方案无效。执行上有什么区别?为什么迭代函数不起作用?(忽略不同的退货类型)
出现的错误是,在迭代的情况下,只有一个元素被正确插入。连续插入不起作用。
类别定义:
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);
}
}
谢谢!
在递归中,当您调用insert()时,整个函数都会执行,这是正确的。
在迭代解决方案中,您会找到一个节点,该节点将是新节点的父节点,但您会用新节点覆盖该节点,而不是将其设置为子节点。
您需要在某个位置安装travNode->left = newNode
或travNode->right = newNode
。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- "find"的递归版本和非递归版本有什么区别?
- 系统堆栈中的两个函数的递归调用(将不同数量的数组作为参数传递)有什么区别
- 迭代和递归有什么区别
- 二进制搜索树插入中迭代和递归的区别
- 模板递归中的函数、结构枚举和结构属性有什么区别?
- c++中调用和返回递归函数的区别
- 递归。返回 func() 和 if (func()) 返回 true 有什么区别?