Я нахожусь в процессе кодирования проекта для древовидной структуры данных - в частности, основная функциональность, которую он предоставит, заключается в отображении данного дерева по-разному (различные макеты на экране холста JFrame).Для простоты я предполагаю, что дерево, которое должно быть напечатано, всегда будет бинарным деревом.
Алгоритм вычисления макета требует, чтобы я сделал обход дерева по порядку / предварительному заказу / после заказа по дереву.В моем проекте я собираюсь написать методы, подобные следующим:
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 для доступа к левому дочернему элементу, в то время как Project B называет его leftChild.Сначала я думал использовать Java Reflection (наряду с запросом пользователя предоставить имена полей для доступа к левым / правым дочерним элементам), но я не уверен, что это правильный путь.
Делает лучшедизайн существует?