二进制搜索树的字符串

时间:2013-03-17 18:49:26

标签: java binary-tree binary-search-tree

我有一个关于字符串的二叉搜索树究竟是如何工作的问题。我知道并且已经实现了整数的二进制搜索树,通过检查新数据< =父数据然后通过分支左边如果它更少或更右边如果它更大。但是我对如何使用字符串节点实现这一点感到有些困惑。

使用整数或字符,我可以在数组中插入我编程的树的插入方法,并正确构建树节点。我的问题是如何使用字符串数组来处理它。你如何让树枝在树中正确分支?例如,如果我有一系列问题,我将如何正确分支BST,这样我最终会得到正确的答案。

例如,请查看以下简单的树示例。

                                        land animal?            
                   have tentacles?------------^-------------indoor animal
          have claws?-----^----jellyfish    live in jungle?----^----does it bark?      
eat plankton?----^----lobster             bear----^----lion        cat----^----dog
shark----^----whale

如何填充此类树,以便节点填充所需的位置。我正在尝试为麻烦拍摄制作BST,我很困惑如何填充字符串的节点,使它们出现在正确的位置。你需要对节点进行硬编码吗?

1 个答案:

答案 0 :(得分:1)

更新2,构建二元决策树

二元决策树可以被认为是一组问题,它们产生关于叶节点方面的布尔响应 - 方面存在/保持为真或不存在。也就是说,对于特定节点/边缘的每个后代,我们必须能够说“这个问题/答案成立”(答案可以是“真”或“假”)。例如,树皮是(正常)狗的一个方面,但是触须不是鲸鱼的一个方面。在显示的树中,假边缘始终指向左子树:这是避免用true / false或Y / N标记每个边缘的约定。

可以从现有/外部知识构建,允许每个人为每个动物回答每个问题。

这是一个粗略的算法,可用于构建这样的树:

  1. 从一组可能的动物开始,打电话给这个A和一组问题,打电话给这个Q.
  2. 从Q中选择一个问题q,其计数(True(q,a in A))最接近count(False(q,a in A)) - 如果得到的树是平衡的二叉树这些计数总是相等的,可以提出最好的问题。
  3. 从Q中删除q并将其用作询问当前节点的问题。将所有False(q,a)放入左子节点可用的动物集(A')中,并将所有True(q,a)放入右子节点可用的动物集(A'')中。 / LI>
  4. 在每个边缘/分支之后(假=左,真=右),从剩余的Q中选择一个合适的问题并重复(根据需要使用A'或A'代替)。
  5. (当然,在course materialwhitepapers网上有更多完整/详细/准确的资源。更不用说在大多数大学校园中选择合适的书籍了。)


    更新,对于[二进制] decision tree

    在这种特殊情况下(添加图表清楚),图表基于代表节点之间 edge 的问题的“是”或“否”响应。也就是说,树不是使用字符串值本身的排序构建的。在这种情况下,总是让左分支“false”和右分支“true”可能是有意义的,尽管如果允许非二进制响应,每个节点可以有更多的边/子。

    决策树必须是"trained" (google search)。也就是说,必须首先基于问题/响应来构建图形,这与仅基于节点之间的排序的BST不同。初始图形构建不能仅仅通过一系列问题来完成,因为边缘不遵循内在的顺序。


    binary search tree的初步回复:

    与整数相同:算法不会改变。

    考虑一个函数compareTo(a,b),它将为<返回-1,0或1。 b,a == b,a> b,分别。

    然后在使用此契约实现函数时,如果这样的类型支持排序,则认为既不是a也不重要(只要它们是相同的):它将是整数的“原始”并使用宿主语言字符串类型的相应字符串比较。