gpt4 book ai didi

Java软件设计: Making a generic tree - printing library

转载 作者:行者123 更新时间:2023-12-02 10:44:11 26 4
gpt4 key购买 nike

我正在为树数据结构编写一个项目 - 具体来说,它将提供的主要功能是以不同方式显示给定的树(JFrame Canvas 屏幕上的不同布局)。为了简单起见,我假设需要打印的树始终是二叉树。

计算布局的算法需要我对树进行中序/前序/后序遍历。在我的项目中,我将编写类似于以下的方法:

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

根节点作为对象传递,因为二叉树可能在其他一些外部项目中使用其自己的自定义类定义进行定义。例如,以下两个项目都有自己的表示二叉树的类定义:

// 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;
...
}

类 MyBinaryTreePrinterProject 中的方法如何了解所提供的二叉树的结构?例如,项目 A 中的二叉树有一个名为“left”的字段来访问左子节点,而项目 B 将其命名为“leftChild”。我最初的想法是使用 Java Reflection(同时请求用户提供用于访问左/右子项的字段名称),但我不确定这是否是正确的方法。

是否存在更好的设计?

最佳答案

您应该提供一个 MyBinaryTree 接口(interface),并且客户端必须实现该接口(interface)。

在这种情况下也许

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

关于Java软件设计: Making a generic tree - printing library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com