Java软件设计:制作泛型树-打印库
Java Software design: Making a generic tree - printing library
我正在为树数据结构编写一个项目——具体来说,它将提供的主要功能是以不同的方式显示给定的树(JFrame canvas 屏幕上的不同布局) .为了简单起见,我假设需要打印的树总是二叉树。
计算布局的算法需要我对树进行inorder/preorder/postorder遍历。在我的项目中,我将编写类似于以下的方法:
class MyBinaryTreePrinterProject{
public void inOrderTraversal(Object root){
// do inorder traversal
}
public void preOrderTraversal(Object root){
// do preorder traversal
}
public void postOrderTraversal(Object root){
// do postorder traversal
}
}
根节点作为 object 传递,因为二叉树可能在其他一些具有自定义 class 定义的外部项目中定义。例如,以下是两个项目,它们有自己的 class 表示二叉树的定义:
// Tree definition in some unrelated Project A
class ProjectATreeNode{
public ProjectATreeNode left;
public ProjectATreeNode right;
...
}
// Tree definition in some unrelated Project B
class ProjectBTreeNode{
public ProjectBTreeNode leftChild;
public ProjectBTreeNode rightChild;
...
}
classMyBinaryTreePrinterProject 中的方法如何知道所提供的二叉树的结构?例如,项目 A 中的二叉树有一个名为 'left' 的字段来访问左侧 child,而项目 B 将其命名为 'leftChild'。我最初的想法是使用 Java 反射(以及要求用户提供访问 left/right children 的字段名称),但我不确定这是否是正确的方法去吧。
是否存在更好的设计?
您应该提供一个 MyBinaryTree 接口,客户端必须实现该接口。
在这种情况下可能
interface MyBinaryTree {
MyBinaryTree getRoot();
MyBinaryTree getParent();
MyBinaryTree getLeft();
MyBinaryTree getRight();
}
客户会
class TreeA implements MyBinaryTree {
MyBinaryTree getRoot()
{//do stuff}
MyBinaryTree getParent()
{//do stuff}
MyBinaryTree getLeft()
{//do stuff}
MyBinaryTree getRight();
{//do stuff}
}
我正在为树数据结构编写一个项目——具体来说,它将提供的主要功能是以不同的方式显示给定的树(JFrame canvas 屏幕上的不同布局) .为了简单起见,我假设需要打印的树总是二叉树。
计算布局的算法需要我对树进行inorder/preorder/postorder遍历。在我的项目中,我将编写类似于以下的方法:
class MyBinaryTreePrinterProject{
public void inOrderTraversal(Object root){
// do inorder traversal
}
public void preOrderTraversal(Object root){
// do preorder traversal
}
public void postOrderTraversal(Object root){
// do postorder traversal
}
}
根节点作为 object 传递,因为二叉树可能在其他一些具有自定义 class 定义的外部项目中定义。例如,以下是两个项目,它们有自己的 class 表示二叉树的定义:
// Tree definition in some unrelated Project A
class ProjectATreeNode{
public ProjectATreeNode left;
public ProjectATreeNode right;
...
}
// Tree definition in some unrelated Project B
class ProjectBTreeNode{
public ProjectBTreeNode leftChild;
public ProjectBTreeNode rightChild;
...
}
classMyBinaryTreePrinterProject 中的方法如何知道所提供的二叉树的结构?例如,项目 A 中的二叉树有一个名为 'left' 的字段来访问左侧 child,而项目 B 将其命名为 'leftChild'。我最初的想法是使用 Java 反射(以及要求用户提供访问 left/right children 的字段名称),但我不确定这是否是正确的方法去吧。
是否存在更好的设计?
您应该提供一个 MyBinaryTree 接口,客户端必须实现该接口。
在这种情况下可能
interface MyBinaryTree {
MyBinaryTree getRoot();
MyBinaryTree getParent();
MyBinaryTree getLeft();
MyBinaryTree getRight();
}
客户会
class TreeA implements MyBinaryTree {
MyBinaryTree getRoot()
{//do stuff}
MyBinaryTree getParent()
{//do stuff}
MyBinaryTree getLeft()
{//do stuff}
MyBinaryTree getRight();
{//do stuff}
}