C++ "destructive procedural variant"导致以前版本的二叉搜索树丢失
C++ "destructive procedural variant" results in prior version of binary search tree being lost
我一直在审查C 指针和参考文献,并希望验证我在以下示例中了解了Wikipedia的以下示例中的"破坏性程序变体"的含义:
这是在C 中的二进制树中可以执行典型的二进制搜索树的插入方式:
Node* insert(Node*& root, int key, int value) { if (!root) root = new Node(key, value); else if (key < root->key) root->left = insert(root->left, key, value); else // key >= root->key root->right = insert(root->right, key, value); return root; }
上述破坏性程序变体修改了树的位置。 它仅使用恒定的堆空间(并且迭代版本使用 恒定的堆栈空间也(,但是树的先前版本是 迷失。
是这里的重点(无需双关语(,当我们的指针被引用到新节点对象时,可能还有其他" root"指针的其他副本仍会指向零值?
如果是,那么为什么要使用"树的先前版本丢失"呢?(在C 中,不是一个简单的解决方案是确保没有人存储指向零二进制树的指针,或者确保它们存储对根指针而不是副本的引用?(
在Wikipedia条目中进一步向下,将Python的行为视为一个对比示例。在那里,您会看到在树上"添加"一个节点实际上创建了带有额外节点的新树。因此,在这种情况下仍可以引用插入插入之前的树。
但是,在C 示例中,当插入新节点并丢失了先前的状态时,树结构会更改。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 使用C++创建特殊的二叉搜索树
- 在递归二叉搜索树中搜索
- 在二叉搜索树中插入时出现分段错误
- C++二叉搜索树模板从函数返回节点
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 在二叉搜索树C++中计算平均值
- 在字符串的二叉搜索树中搜索子字符串 - C++
- 在二叉搜索树中插入新元素
- 如何打印在二叉搜索树中找到的数据?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 这是一个二叉搜索树吗?黑客排名问题
- 二叉搜索树 - 实现"search"函数
- 二叉搜索树的 C++ 实现中的EXC_BAD_ACCESS错误
- 删除二叉搜索树 (C++) 中的单个元素
- 将值存储在带有C++的二叉搜索树中
- 二叉搜索树未将插入值加载到树中
- 二叉搜索树使用最常用的节点来打印出某些语句
- C++ "destructive procedural variant"导致以前版本的二叉搜索树丢失