[英]How to store a binary search tree into a two-d array and print it out, in Java?
我已经创建了一个二进制搜索树,但是我不知道如何将其放入二维数组(我对递归和非递归方法都感兴趣)并打印出来。
如下图
7
/ \
5 9
/ \ / \
4 6 8 15
.
.
.
抱歉表达模糊。 基本上,我试图1)从文件中读取数字序列,并为它们构建一个二进制搜索树。
2)我需要将树绘制到字符数组中(必须是二维数组)以表示绘图区域。 因此,树的根必须在数组的第一行的中间,并且第一个左孩子必须在第二行的一半中间,而第一个右孩子必须在另一行的中间第二行的一半。 等等。
如下图
------------34------------
-----24------------56-----
---9-----32-----41----57--
3)最后我需要将其打印出来(作为第一张图)。
我有BinaryNode.class BinaryTree.class,并且在树类中,对于根,左子级和右子级有几种基本方法getmethod和setmethod。
这是我关于主类的代码的一部分:
BinaryTree BinarySearchTree = new BinaryTree();
FileReader theFile;
BufferedReader inFile;
String oneLine;
try{
theFile = new FileReader(args[0]);
inFile = new BufferedReader(theFile);
while((oneLine = inFile.readLine())!= null){
String[] list = oneLine.split(",");
for(int i=0; i<list.length; i++){
BinaryNode TreeNode = new BinaryNode(list[i]);
BinaryTree.insert(BinarySearchTree, TreeNode.element);
}
}
}
catch (Exception e) {
System.out.println(e);
}
// building binary search tree
public static BinaryTree insert(BinaryTree t, Object x){
if(t.isEmpty())
return new BinaryTree(x);
else{
if(((Integer)t.getRootobj()).intValue()<((Integer)x).intValue())
t.setRight(insert(t.getRight(),x));
else
t.setLeft(insert(t.getLeft(),x));
return t;
}
您可以在第一个数组中使用node的值作为索引,在第二个数组中使用将要存储的子项的值。 您可以将左子项的值作为索引0,将右子项的值作为索引1。要标记没有左子项或右子项,可以使用负值或零。 要知道初始根元素,可以搜索具有至少一个元素的数组的第一个元素,或者可以考虑将根元素存储在某处的方法。 绝对不是最佳选择,但应该可以。
这是示例:
[0] -> {0,0}
[1] -> {2,3}
[2] -> {4,5}
[3] -> {6,7}
[4] -> {0,0}
由于二叉树是Graph数据结构的特定示例,因此您可以检查现有的Graph表示形式,例如,邻接表或邻接矩阵。
这些链接可能会有所帮助:
您可以将一棵二叉树存储在一维数组中。
1
/ \
2 3
/ \ / \
4 5 6 7
结果数组A为A = [1、2、3、4、5、6、7]
节点i的左子节点由2*i + 1
,右子节点由2*i + 2
,第一个节点的索引为0。
示例:第三个节点的左子节点和右子节点(索引:2)左子节点:2 * i +1 = 2 * 2 + 1 = 5,A [5] = 6,正确! 正确的孩子:2 * i + 2 = 2 * 2 + 2 = 6,A [6] = 7,也正确!
因此,有了这个“算法”,您就可以构建一个Java类来秘密处理一维数组中的Tree!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.