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



我有一个数据结构类的编码项目,但我很难从哪里开始。任务要求:

使用数组表示和节点标签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) {
}
}

如果可能的话,我希望把它分解成更小的步骤,因为我不知道从哪里开始。此外,我没有序列化的经验。

我不是在要求代码,只是一个指南

  • 假设字符串索引与节点的关系为left child = 2 * parent index + 1right child = 2 * parent index + 2

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

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

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

相关内容

最新更新