Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用给定的类从字符串数组实现二叉树,然后对其进行序列化、反序列化和遍历?_Java_Binary Tree - Fatal编程技术网

Java 如何使用给定的类从字符串数组实现二叉树,然后对其进行序列化、反序列化和遍历?

Java 如何使用给定的类从字符串数组实现二叉树,然后对其进行序列化、反序列化和遍历?,java,binary-tree,Java,Binary Tree,我有一个数据结构类的编码项目,但我正在努力从哪里开始。作业要求: 使用数组表示法和节点标签A、…、J作为字符串,将二叉树作为数组输入。标签null表示不存在的节点,而不是值为null的节点。检查二叉树输入的有效性:每个节点(根节点除外)都应该有一个父节点。仅使用标签不同于null的节点生成树的动态内存实现。使用序列化将获取的BinaryTreeobject保存为文件。反序列化文件以还原树。对恢复的树执行前序、后序和顺序树遍历,并列出访问节点的标签。创建单元测试并实现测试类 我得到了一个二叉树类:

我有一个数据结构类的编码项目,但我正在努力从哪里开始。作业要求:

使用数组表示法和节点标签A、…、J作为字符串,将二叉树作为数组输入。标签null表示不存在的节点,而不是值为null的节点。检查二叉树输入的有效性:每个节点(根节点除外)都应该有一个父节点。仅使用标签不同于null的节点生成树的动态内存实现。使用序列化将获取的BinaryTreeobject保存为文件。反序列化文件以还原树。对恢复的树执行前序、后序和顺序树遍历,并列出访问节点的标签。创建单元测试并实现测试类

我得到了一个二叉树类:

public class BinaryTree<T> implements java.io.Serializable
{    
private T data;
private BinaryTree<T> left;
private BinaryTree<T> right;
public BinaryTree(T data) 
{ 
this.data = data; 
left = null; 
right = null;
} 
public T getData() 
{
return data;
}    
public void attachLeft(BinaryTree<T> tree) 
{ 
if (tree != null) left = tree; 
}    
public void attachRight(BinaryTree<T> tree)
{
if (tree != null) right = tree;
}   
public BinaryTree<T> detachLeft() 
{ 
BinaryTree<T> t = left; 
left = null; 
return t;  
} 
public BinaryTree<T> detachRight() 
{ 
BinaryTree<T> t = right;
right = null;
return t;
}     
public boolean isEmpty()
{ 
return data == null;
}    
public void inOrder(BinaryTree <T> tree)   
{        
if ( tree != null) 
{   
inOrder(tree.left);
System.out.println(tree.getData());
inOrder(tree.right); 
}    
}
public void preOrder(BinaryTree <T> tree)
{
}
public void postOrder(BinaryTree <T> tree) {
}
}
公共类二进制树实现java.io.Serializable
{    
私有T数据;
私有二叉树左;
私有二叉树权;
公共二叉树(T数据)
{ 
这个数据=数据;
左=空;
右=空;
} 
公共T getData()
{
返回数据;
}    
公共void附件左(二叉树)
{ 
如果(tree!=null)left=tree;
}    
公共无效附件权限(二叉树)
{
如果(tree!=null)right=tree;
}   
公共二叉树(左)
{ 
二叉树t=左;
左=空;
返回t;
} 
公共二叉树detachRight()
{ 
二叉树t=右;
右=空;
返回t;
}     
公共布尔值为空()
{ 
返回数据==null;
}    
公共无效索引(二进制树)
{        
如果(树!=null)
{   
顺序(树,左);
System.out.println(tree.getData());
顺序(tree.right);
}    
}
公共无效预排序(二叉树)
{
}
公共作废邮购(二叉树){
}
}
如果可能的话,我想把它分解成更小的步骤,因为我不知道从哪里开始。此外,我没有序列化的经验

我不是要代码,只是要一个指南。
  • 假设字符串索引与节点的关系为
    左子项=2*父项索引+1
    右子项=2*父项索引+2

  • 现在字符串的形式为
    “A,B,…,J”
    ,您可以将字符串拆分为一个数组,其中
    arr[0]=A
    arr[N]=J

  • 每个元素本身是一个大小为1的树,它们是包含所有元素的大元素的子树

  • 根据索引,迭代或递归地将它们添加到一棵大树中。例如,
    arr[0]=A=root
    arr[1]=left child=B//因为1=2*0+1
    arr[2]=right child=C//因为2=2*0+2
    等等。忽略空节点,现在您有了最后一棵树


无需对类执行任何特殊操作即可使其序列化;只需使用ObjectOutputStream。快速的网络搜索应该会找到很多例子。