algorithm - 插入 BST 时,插入的第一项是否总是树的根?

标签 algorithm data-structures binary-tree

查看维基百科上的实现,标准 BST(非自平衡)似乎在插入期间从不重新排列自身,因此添加的第一个项目将始终是根。它是否正确?如果是这样,这是否意味着 BST 有可能经常比 O(logN) 差得多?

将其用作递归插入的引用:

 /* Inserts the node pointed to by "newNode" into the subtree rooted at "treeNode" */
 void InsertNode(Node* &treeNode, Node *newNode)
 {
     if (treeNode == NULL)
       treeNode = newNode;
     else if (newNode->key < treeNode->key)
       InsertNode(treeNode->left, newNode);
     else
       InsertNode(treeNode->right, newNode);
 }

最佳答案

是的,它将总是在根节点上,因为:

  • 那是你唯一可以把它放在空树中的地方;和
  • 你没有移动它。

当然,您可以删除它,这将导致另一个节点成为根节点,但不会将原始第一个节点移动到树的其他位置。

不平衡二叉树的退化情况是链表,其搜索时间复杂度为 O(n)。

关于algorithm - 插入 BST 时,插入的第一项是否总是树的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779685/

相关文章:

algorithm - 最大化序列中数字之间的差异

sql-server - 模糊字符串匹配 SQL - 不同顺序的单词

performance - 高效存储和评估大量 boolean 表达式

c - linux内核中红黑节点的struct对齐

c - 确定恰好具有 4 个节点的子树数量的最佳方法是什么?

javascript - 范围内 JS 日期对象的百分比

algorithm - 给定矩形内的最小瓷砖数量

database - 每周计划——如何将其存储在数据库中?

python - 寻找最近连接的图算法

c - 没有递归的二叉搜索树插入 C