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