我有一本书以非常糟糕的方式解释了二元搜索树背后的理论我知道左右两个孩子的顺序有一些东西,但我仍然无法理解一个比另一个更大的想法水平。
以这个字符串树为例:
(对不起我的画)这个例子直接来自我的书:)
有人可以向我解释订单吗?这背后的逻辑是什么?
答案 0 :(得分:8)
在BST中,每个节点最多只有一个左孩子和一个右孩子。给定节点左侧的每个节点都小于它,并且给定节点右侧的每个节点都大于它。其中一个后果就是你不能有重复的值,所以我不确定这个例子是否与书中的具体相符。
在您的示例中,字符串按字母顺序排序。以根节点为例,鲍勃来到凯伦之前,所以鲍勃继续前往凯伦的左边。汤姆跟凯伦走来,所以汤姆继续说凯伦是对的。从整个树看,你可以看到Karen左边的每个节点(Bob,Alan,Ellen)按字母顺序排在Karen之前,Karen右边的每个节点(Tom,Wendy)都来自Karen按字母顺序排列。无论您查看哪个节点,此模式都是相同的。
答案 1 :(得分:2)
对于任何节点(Karen - 例如root),左子树中的每个节点(Bob,Alan,Ellen)在字典上比Karen小,并且在右子树中的每个节点( Tom,Wendy)比Karen大。
第二凯伦不应该在那里,正如@mellamokb在评论中指出的那样。
因此,您可以像在排序数组中那样在O(log N)时间内二叉搜索此树。
答案 2 :(得分:0)
对于任何节点:
这提供了一些独特的属性
O(Log n)
时间内。答案 3 :(得分:0)
在您的示例中,它们表示每个名称中第一个符号的顺序。
如果你看到,从左到右的名字顺序是从ABC中的第一个字符到最后一个字符。
此外,还有一个特殊情况,第二次出现Karen名字 - 如果输入相同的数据,则此树中的默认行为是“向右移动”,然后Karen与Tom相比 - > K比T“小”,所以它就离开了它。
无论如何,这里有更好的例子,你可以从中看到二叉树中的订单号: http://www.codeproject.com/Articles/4647/A-simple-binary-tree-implementation-with-VB-NET
答案 4 :(得分:-1)
我认为这篇文章对于理解二叉树的概念非常有帮助,它还提供了C / C ++和Java中的通用代码示例: