如何从文本文件构造无序二叉树

时间:2014-01-19 17:04:50

标签: java

亲爱的朋友我是中级java用户。我陷入了以下问题。我想从多行(比方说40行)文本文件构造无序二叉树[或具有最多两个节点的通用树]。然后将文本文件分成两半;比方说20:20行。然后,对于每一半,计算特定(假设散列)值并将其存储在根节点中。因此每个节点包含四个元素。指向两个孩子(左和右)的两个指针和原始文件的两个半部分的两个哈希。接下来对于每一半(20行)重复该过程,直到在每个叶子处我们具有单行文本。让节点有

public class BinaryTree {

    private BinaryTreeNode leftNode, rightNode;

    private String leftHash,rightHash;

}

我需要帮助来编写树构造和搜索功能。通过输入一行来进行搜索。然后为该查询行创建哈希码,并与每个节点保存的两个哈希值进行比较。如果查询行的哈希值接近leftHas,则访问leftNode,如果查询行的哈希值接近rightHash,则访问rightNode。该过程将继续,直到找到确切的哈希。 我只需要树构造和搜索教学。哈希比较等不是问题

1 个答案:

答案 0 :(得分:1)

您需要先将文件读入字符串。

字符串中的第一个字符可以用作根。 Root + 1将是左侧,root + 2将是右侧

考虑根的根节点(Root + 1),您也可以将其视为Root + N.意味着右节点将是Root + N + 1.

现在,您可以通过建立当前所在的节点并分别设置左侧和右侧来递归解决此问题。

让我们考虑一下,

您已建立根节点,左节点和右节点。此时你已经使用了3个字母/数字(如果它是无序的,那真的无关紧要)。下一步是向下移动一个级别并开始填充左侧,您有根,需要左右节点。然后移动到右边的节点,执行此节点的左右节点,依此类推。

稍微考虑一下,看看你到了哪里。

干杯,

麦克

编辑:

要搜索,

搜索二叉树也是一个递归主题。 (我以为你以前曾说这棵树是无序的,这可能会改变树的布局方式,如果它被认为是有序的。)

如果它是无序的,你可以简单地以这样的方式递归树

A。)检查根节点 B.)检查左侧节点 C.)继续检查左节点,直到有匹配,或者不再检查左节点 D.)递回1,检查右节点 E.)检查左节点, F.)回避,检查正确的节点

此主题将继续,直到最终您首先检查所有左侧节点,然后检查右侧节点。对此的关键是,你有一个根节点,先左转,然后右转。 (我忘记了这是什么遍历类型,但如果您希望在此实现它们,还有其他类型,我个人认为这是最容易记住的。)

然后,您将重复为Root节点的右子节点。

如果您在任何时候获得匹配,请退出。

请记住这是递归的,因此请务必按照这一步骤进行思考。根据定义,它是递归的,因为你总是会为树的每个部分执行步骤x,y,z。

要击败死马,让我们看看只有3个节点开始。 (简化的)

首先是根,

if(root == (what your looking for))
{ 
   return root
}
else if(root.leftNode == (what your looking for))
{
   return root.leftNode
}
else if(root.rightNode == (what your looking for))
{
   return root.rightNode
}
else
{
   System.out.println("Value not found")
}

如果你有5个节点,那就是root将有一个左右,root.leftNode将有一个左右...你也会在root.leftNode上重复上面的步骤,然后搜索root。 rightNode

如果你有7个节点,你将搜索所有的root.leftNode然后递归回搜索root.leftNode。

我希望这有帮助,

在谈论穿越树木时,我认为图片的效果要好得多。

也许在这里寻找更好的视觉效果      http://www.newthinktank.com/2013/03/binary-tree-in-java/