我被要求编写一个应用程序“printit”,将格式为“51850 Kianna Squares,Terre Haute552.531.3674Gislason Kenna”的数据文件加载到BST中,然后遍历BST并按姓名顺序打印出电话列表。我得到了通用BST的代码,并创建了自己的记录数据类型,以当前格式存储整行。我在getName()方法中创建了一个解析行并从行中提取名称的方法。我很难找到如何让我的BST使用getName()方法,以便通过比较名称插入每个节点,并按名称的字母顺序打印出来。
然后,我被要求读取一个20个条目的查询文件,其中包含20个不同的名称。然后,我必须比较查询文件中的每个名称,并搜索具有相同名称的记录对象。record对象以原始格式“51850 Kianna Squares,Terre Haute552.531.3674Gislason Kenna”保存整行,所以我知道必须将每个名称与record对象的getName()方法进行比较,但还是遇到了麻烦。如何获取二进制搜索树以实现用于搜索和排序的getName()方法?
我的唱片类:
public class NodeInfo implements Comparable<NodeInfo>
{
String line;
String name;
public String getName(String lineTwo)
{
String split = "\\|";
String segments[] = lineTwo.split(split);
String name = segments[segments.length -1];
return name;
}
public void setName(String name)
{
this.name = name;
}
public NodeInfo(String record)
{
this.line = record;
}
public String getLine()
{
return line;
}
public int compareTo(NodeInfo other)
{
String x = this.line;
String y = other.line;
return x.compareTo(y);
}
public String toString()
{
return line;
}
}
我的二叉搜索树类:
public class BinarySearchTree<NodeInfo extends Comparable<? super NodeInfo>> extends BinaryTree<NodeInfo>
{
public void insert ( NodeInfo d )
{
if (root == null)
root = new BinaryTreeNode<NodeInfo> (d, null, null);
else
insert (d, root);
}
public void insert ( NodeInfo d, BinaryTreeNode<NodeInfo> node )
{
if (d.compareTo (node.data) <= 0)
{
if (node.left == null)
node.left = new BinaryTreeNode<NodeInfo> (d, null, null);
else
insert (d, node.left);
}
else
{
if (node.right == null)
node.right = new BinaryTreeNode<NodeInfo> (d, null, null);
else
insert (d, node.right);
}
}
public BinaryTreeNode<NodeInfo> find ( NodeInfo d )
{
if (root == null)
return null;
else
return find (d, root);
}
public BinaryTreeNode<NodeInfo> find ( NodeInfo d, BinaryTreeNode<NodeInfo> node )
{
if (d.compareTo (node.data) == 0)
return node;
else if (d.compareTo (node.data) < 0)
return (node.left == null) ? null : find (d, node.left);
else
return (node.right == null) ? null : find (d, node.right);
}
我的二叉树节点类:
public class BinaryTreeNode<NodeInfo>
{
NodeInfo data;
BinaryTreeNode<NodeInfo> left;
BinaryTreeNode<NodeInfo> right;
public BinaryTreeNode ( NodeInfo d, BinaryTreeNode<NodeInfo> l, BinaryTreeNode<NodeInfo> r )
{
data = d;
left = l;
right = r;
}
BinaryTreeNode<NodeInfo> getLeft ()
{
return left;
}
BinaryTreeNode<NodeInfo> getRight ()
{
return right;
}
}
我的二叉树类:
public class BinaryTree<NodeInfo> {
BinaryTreeNode<NodeInfo> root;
public BinaryTree() {
root = null;
}
public void visit(BinaryTreeNode<NodeInfo> node) {
System.out.println(node.data);
}
public void inOrder() {
inOrder(root);
}
public void inOrder(BinaryTreeNode<NodeInfo> node) {
if (node != null) {
inOrder(node.getLeft());
visit(node);
inOrder(node.getRight());
}
}
}
最后是我到目前为止的主要方法:
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class ReadFile {
public static void main(String[] args) {
Scanner scanOne = new Scanner(System.in);
ArrayList<NodeInfo> holder = new ArrayList<>();
try {
Scanner scan = new Scanner(System.in);
File file = new File("testdata");
scan = new Scanner(file);
while(scan.hasNextLine())
{
String line = scan.nextLine();
NodeInfo info = new NodeInfo(line);
holder.add(info);
}
scan.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
BinarySearchTree<NodeInfo> directory = new BinarySearchTree<>();
for(int i = 0; i < holder.size(); i++)
{
NodeInfo one = holder.get(i);
String line = one.getLine();
directory.insert(one);
}
directory.inOrder();
}
}
您的BST调用NodeInfo的compareTo方法进行搜索和排序,该方法又使用line属性比较两个条目。使compareTo使用属性名而不是属性行进行比较。通过快速扫描,我找到了对NodeInfo实例的setName的调用。因此,您要么将其添加到扫描部分,要么依赖于compareTo方法中的getName调用,而不是使用name属性。
public class NodeInfo implements Comparable<NodeInfo>
{
...
public int compareTo(NodeInfo other)
{
String x = getName(this.line);
String y = getName(other.line);
return x.compareTo(y);
}
...
}
下面是一个二叉查找树,它有一个根节点、一个左节点和一个右节点。代码有效,但我想显示这个二叉查找树,这样我就可以看到图层中的每个节点…这是代码…
我想以这种格式打印二叉查找树: 我想我必须获得树的深度,然后,对于每个级别,在每个元素前后打印一些空格。 我不知道如何继续。 节点类:
//执行顺序遍历的递归方法
我一直在尝试从Node切换到Java,我想知道的一件事是如何以类似于Node显示的格式打印对象,例如二叉树。例如,我的二叉树初始化代码如下: 在节点中,此二叉树将显示如下: 然而在Java,当我做system.out.println(树); 输出->BinaryTree@4554617c 什么是打印我的BinaryTree的正确方法?什么是好方法?有没有一种方法可以用JSON格式打印树?
我写的是testdome https://www.testdome.com/for-developers/solve-question/9708中给出的一个测试示例的答案 问题是关于二叉搜索树的: 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 例如,对于以下树:n1(值:1,left:null,right:null)n2
问题内容: 如何在Java中打印二进制树,使输出类似于: 我的节点: 问题答案: 我已经创建了简单的二叉树打印机。你可以根据需要使用和修改它,但是仍然没有对其进行优化。我认为很多事情可以在这里得到改善;) 输出1: 输出2: