How to implement a binary tree from a string array using a given class and then serialize, deserialize, and traverse it?

huangapple go评论85阅读模式
英文:

How to implement a binary tree from a string array using a given class and then serialize, deserialize, and traverse it?

问题

Sure, I'll help you break down the given task into smaller steps to guide you through the process. Here's how you can approach it:

Step 1: Understand the Problem

  • Read the assignment thoroughly to understand what's being asked.
  • The goal is to input a binary tree as an array, validate it, create a dynamic memory implementation of the tree, serialize it, deserialize it, perform various tree traversals, and implement unit tests.

Step 2: Familiarize Yourself with the BinaryTree Class

  • Review the provided BinaryTree class and its methods (attachLeft, attachRight, detachLeft, detachRight, etc.).
  • Understand how the class represents a binary tree node with data and links to left and right children.

Step 3: Input Binary Tree as an Array

  • You need to convert the given binary tree into an array representation. This can be done using techniques like breadth-first traversal and mapping the tree nodes to array indices.

Step 4: Validate Binary Tree

  • Verify that each node (except the root) has a father, ensuring the tree's validity.

Step 5: Dynamic Memory Implementation

  • Implement the dynamic memory structure of the tree using only nodes with non-null labels.
  • This means creating the tree structure in memory by linking nodes together.

Step 6: Serialization and Deserialization

  • Learn about Java serialization to convert the binary tree into a serialized format.
  • Serialize the dynamic memory implementation of the tree and save it to a file.
  • Deserialize the file to restore the tree when needed.

Step 7: Implement Tree Traversals

  • Implement the preOrder, inOrder, and postOrder methods for tree traversal.
  • These methods will traverse the tree in different orders and perform actions on the nodes (printing the labels, in this case).

Step 8: Unit Tests

  • Create a separate class for unit testing.
  • Design and implement test cases that cover different scenarios (valid and invalid trees, different traversals, etc.).

Step 9: Putting it All Together

  • Start by working on each step individually and testing as you go along.
  • Once each step is working correctly, integrate them to achieve the complete solution.

Step 10: Learning Serialization

  • If you're unfamiliar with serialization, you can learn about it in Java. There are plenty of tutorials and resources available online to help you understand the concept and implementation details.

Remember that this process might require some research and learning, especially if you're new to certain concepts like serialization. Take your time, break down the problem into smaller parts, and focus on understanding each step before moving on. Good luck!

英文:

I have a coding project for my data structures class but I am struggling with where to start. The assignment asks this:
>Input your binary tree as an array, using the array representation and node labels A, ..., J, as Strings. Label null stands for a non-existent node, not for a node having a value of null. Check the validity of your binary tree input: each node, excepting the root, should have a father. Generate the dynamic memory implementation of the tree, using only the nodes with labels different than null. Save the obtained BinaryTreeobject as a file, using serialization. Deserialize the file to restore the tree. Perform a preorder, a postorder, and an inorder tree traversal of the restored tree and list the labels of the visited nodes. Create unit tests and implement a test class.

I am given a binary tree class:

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) {
}
}

I would like this to be broken down into smaller steps if possible as I am not sure where to begin. Also, I have no experience with serialization.

I am not asking for code, just a guide through this.

答案1

得分: 1

  • 假设字符串索引与节点的关系为 左子节点 = 2 * 父节点索引 + 1右子节点 = 2 * 父节点索引 + 2

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

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

  • 根据索引,逐步或递归地将它们添加到一个大树中。例如,arr[0] = A = 根节点arr[1] = 左子节点 = B // 因为 1 = 2 * 0 + 1arr[2] = 右子节点 = C // 因为 2 = 2 * 0 + 2,依此类推。忽略空节点,现在您有了一棵最终的树。

英文:
  • Assuming the relation ship of string index vs. node is left child =
    2 * parent index + 1
    and right child = 2 * parent index + 2.

  • Now the string is given in the form "A, B, ..., J", you can split the string in to an array where arr[0] = A and arr[N] = J

  • Each element itself is a tree of size 1, and they are a sub tree of the big one which contains all element.

  • Base on the index, iteratively or recursively add them to a big tree. For example, arr[0] = A = root, arr[1] = left child = B // because 1 = 2 * 0 + 1, arr[2] = right child = C // because 2 = 2 * 0 + 2 and so on. Ignore the null nodes, now you have a final tree.

huangapple
  • 本文由 发表于 2020年9月11日 06:34:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/63838507.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定