繁体   English   中英

为什么二元树很重要?

[英]Why are Binary Trees Important?

为什么我们要专门研究二叉树? 正如在一般的m-way搜索树中,不像DataStructure教科书中的二叉树那样重要。

使用二叉树是否超过m-way树?

二叉树是多路树的最简单形式,因此在这个意义上它们更容易学习。

多路树的节点由N键和N+1指针组成,沿着以下行:

               |
   +-----+-----+-----+-----+
   | k00 | k01 | k02 | k03 |
   +-----+-----+-----+-----+
  /      |     |     |      \
p00     p01   p02   p03     p04

要找出要在搜索中跟随的指针,请将要查找的键与节点中的键进行比较。 上面的例子是一个2阶多路树(我将n阶定义为具有2n密钥和2n+1指针)。

当你“退化”这个结构以使最小的节点成为可能时,你最终得到一个键和两个指针,你的经典二叉树:

      |
   +-----+
   | k00 |
   +-----+
  /       \
p00       p01

当我上大学时(我会很快承认它是不久前),我们首先研究二叉树,因为算法很优雅。 搜索是一个简单的比较节点,并选择两个子树之一。 插入和删除也相对容易。

然后我们继续进行平衡二叉树,其中搜索完全相同,但插入和删除稍微复杂一些,涉及通过子树根“旋转”子树,必要时保持平衡。

接下来是非平衡多路树,一旦找到正确的节点,就可以获得在节点内搜索的概念,最后,平衡的多路树基本上与二叉树相同但具有相同的结构。增加了顺序搜索的复杂性,以及节点内的插入或删除以及节点本身的组合和吐出。

在每个步骤中,您只需为算法添加一点复杂性。 我不记得有太多人遇到这种进展的麻烦,所以你提到的所有教科书都只是处于初级水平。

我从来没有真正发现多路树比二叉树更有用,除非在一个非常特殊的情况下。 那是当你从像磁盘这样的慢速介质中读取树的节点时,你已经针对扇区/簇/块大小进行了优化。

我们通过确保节点的大小与底层磁盘块相同,在OS / 2下显示了一个多路树实现(显示我的年龄)。 即使这可能会导致一些浪费的空间,速度的提升也是值得的。

对于内存中的东西,二叉树具有多路的所有优点,没有任何额外的复杂性(必须将节点的顺序搜索与子树选择相结合)。

二进制树归结为“我们应该向左还是向右移动?”,多方式是“这个节点中的关键在哪里,以便我们可以选择子树?”。

二叉树是一个简单的概念,它们易于理解,易于实现,并且工作良好且快速 - 我认为这足以用于教学和/或使用它们。

二元树相对于'n-ary'树的优势在于遍历它们通常归结为简单的是/否决策问题,如在二进制空间分区中

因为树数据结构通常用于组织有序元素,例如:a> b> c。 如果您在树中插入的项目是有序的,则您需要的是每个节点上的两个分支,以将较大的元素划分为左子树,将较小的元素划分到右子树中。

这就是为什么二元树比m-ary树更普遍的原因。 它与做出是/否决定的简易性无关,而与m-ary决定无关!

除了上面的所有答案之外,任何arity的树都可以用二叉树表示(其中左链接转到节点的第一个子节点,右链接转到下一个“兄弟”)。

我不会在这里做太多技术..因为问题是为什么二元树在DataStructure中如此重要。 二叉树,意思是基于T / F的树,是/否等。意思是说Duo的组合。 实际上我们面临的情况是我们需要决定是或否。无论是对还是对。 二叉树代表了这种情况。 我们所使用的软件是将使用内部用于解决现实生活场景的数据结构的解决方案。这就是为什么二进制树进入图像并且常用甚至是重要的原因。 其余的树木是进一步的改进或增加的复杂性,以匹配它们与典型的情况。 对于启动二叉树总是很重要。

例如,二叉树用于堆排序(二进制堆)。 这是非常快速排序数据的方式,因此最大(或最低)的项目始终位于前端。 这用于例如AI(A *算法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM