我有一个关于字符串的二叉搜索树究竟是如何工作的问题。我知道并且已经实现了整数的二进制搜索树,通过检查新数据< =父数据然后通过分支左边如果它更少或更右边如果它更大。但是我对如何使用字符串节点实现这一点感到有些困惑。
使用整数或字符,我可以在数组中插入我编程的树的插入方法,并正确构建树节点。我的问题是如何使用字符串数组来处理它。你如何让树枝在树中正确分支?例如,如果我有一系列问题,我将如何正确分支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,我很困惑如何填充字符串的节点,使它们出现在正确的位置。你需要对节点进行硬编码吗?
答案 0 :(得分:1)
更新2,构建二元决策树:
二元决策树可以被认为是一组问题,它们产生关于叶节点方面的布尔响应 - 方面存在/保持为真或不存在。也就是说,对于特定节点/边缘的每个后代,我们必须能够说“这个问题/答案成立”(答案可以是“真”或“假”)。例如,树皮是(正常)狗的一个方面,但是触须不是鲸鱼的一个方面。在显示的树中,假边缘始终指向左子树:这是避免用true / false或Y / N标记每个边缘的约定。
树仅 可以从现有/外部知识构建,允许每个人为每个动物回答每个问题。
这是一个粗略的算法,可用于构建这样的树:
(当然,在course material或whitepapers网上有更多完整/详细/准确的资源。更不用说在大多数大学校园中选择合适的书籍了。)
更新,对于[二进制] decision tree:
在这种特殊情况下(添加图表清楚),图表基于代表节点之间 edge 的问题的“是”或“否”响应。也就是说,树不是不使用字符串值本身的排序构建的。在这种情况下,总是让左分支“false”和右分支“true”可能是有意义的,尽管如果允许非二进制响应,每个节点可以有更多的边/子。
决策树必须是"trained" (google search)。也就是说,必须首先基于问题/响应来构建图形,这与仅基于节点之间的排序的BST不同。初始图形构建不能仅仅通过一系列问题来完成,因为边缘不遵循内在的顺序。
binary search tree的初步回复:
与整数相同:算法不会改变。
考虑一个函数compareTo(a,b)
,它将为<返回-1,0或1。 b,a == b,a> b,分别。
然后在使用此契约实现函数时,如果这样的类型支持排序,则认为既不是a也不重要(只要它们是相同的):它将是整数的“原始”并使用宿主语言字符串类型的相应字符串比较。