【发布时间】:2013-11-04 05:26:36
【问题描述】:
我们如何在二叉树(不是 BST)中插入键?
我的意思是二叉树没有像 BST 这样的节点的某些属性,因此似乎可以在树中任何地方插入一个键。
然而,通过将密钥放在任何位置,二叉树可能会将其退化为“列表”,从而失去其O(logN) 属性。
我已经看到使用合并方案创建二叉树(示例应用程序是 Huffman Tree),但似乎没有遇到二叉树的插入方法。
我相信这个问题扩展到多路树,因为二叉树将是多路树(2个子节点)的特定示例,对吧?
我错了吗?是否有向二叉树添加新键的特定方法,或者二叉树的应用程序是否如此具体以至于合并操作就足够了,并且不需要插入方法?也许我完全错过了BT的使用应用或概念?
注意:我问的是二叉树。 不关于二叉搜索树。
更新:
如果插入可以在任何地方,术语的含义是什么:Full Binary Tree?
这意味着无法通过在任何地方插入来实现的日志属性。 “完全BT”是不是也没有意义的定义?
【问题讨论】:
-
二叉树可以用于任何事情。元素本身没有自然排序或解释;它只是一棵树,每个节点上有两个子节点,可能为 null,并且通常具有与每个节点关联的值。正如您所指出的,您必须限制在树上执行的操作才能获得任何有用的属性。以特殊方式插入节点可以保证树的深度是有限的,例如,你会得到 O(log N) 的查找。你必须选择你有什么目标,以及你需要在树上使用的算法来实现它们。
-
O(log N) 做什么?一棵无序的树怎么会有一个一致的大 O 呢?组织上没有限制,所以大O有点没有意义,不是吗?
-
@DaveNewton:在这种情况下,为什么不首先使用列表并避免所有树逻辑?否则为什么/何时使用二叉树?
-
@user384706 如果你有一个完全退化的情况,那么我不会使用二叉树,但如果你以前不知道您开始,然后 BT 更通用(而不是过于复杂)。回复:“完整 BT”的含义取决于您正在阅读的内容,但仅仅因为您可以在任何地方插入并不意味着您将在任何地方插入。
-
二叉树非常有用!它们用于数据结构,如集合、多集合、关联数组等。标准库数据结构的负载通常使用二叉树以及更具体的算法(如查找 Huffman 编码)来实现。没有正确处理就没有任何用处:您必须以正确的方式拿着刀才能用它切割东西,并且您必须将元素明智地插入二叉树以获得快速查找。不会阻止它们中的任何一个变得非常有用。
标签: algorithm data-structures tree binary-tree