Я искал хорошую реализацию недвоичного дерева, которая бы соответствовала моим потребностям, но я не нашел ее.
Мне нужно недвоичное дерево, в котором число дочерних элементов является произвольным, и это может быть пройдено.Это дерево построено на основе пользовательского ввода, поэтому мне нужно провести циклическую проверку.Другие функции включают в себя удаление узлов (и их дочерних элементов), обход для получения дочерних узлов (и дочерних элементов дочерних элементов) и добавление дочерних элементов (и других деревьев).
Примеры реализаций, которые я нашел в Интернете, включают использование метода firstchild-nextsibling и родительско-дочерних ссылок на узел.Проблема с методом firstchild-nextsibling заключается в добавлении деревьев и узлов в дерево.Метод parent-child кажется разумным, но я не нашел ни одной реализации, которая бы добавляла целые деревья в качестве дочерних и имела бы циклические проверки.
Пример такой реализации:
A
/ \
U W
Тогда пользовательвыбирает создание другого дерева:
B
/ \
X R
и затем добавляет B как дочерний элемент W. Полное дерево будет:
A
/ \
U W
\
B
/ \
X R
Если есть лучший способ реализовать эту структуру данныхтогда я был бы рад услышать это, потому что я не могу думать ни о чем другом.Любая помощь будет принята с благодарностью.Спасибо!
РЕДАКТИРОВАТЬ: Некоторый код, который я написал.
public class TreeNode<T> {
private T data;
private TreeNode<T> firstChild;
private TreeNode<T> nextSibling;
private TreeNode<T> parent;
public TreeNode(T data) {
this.data = data;
}
public boolean isRoot() {
return this.parent == null;
}
public boolean isaLeaf() {
return this.firstChild == null;
}
public TreeNode<T> getFirstChild(){
return firstChild;
}
public void addChild(TreeNode<T> child) {
child.parent = this;
if (this.firstChild == null) {
this.firstChild = child;
} else {
child.nextSibling = firstChild;
firstChild = child;
}
}
public TreeNode<T> getParent(){
return parent;
}
public TreeNode<T> getNextSibling() {
return nextSibling;
}
public T getData() {
return data;
}
}
РЕДАКТИРОВАТЬ 2: мое дерево позволяет добавлять аналогичные узлы, но оно не позволяет создавать бесконечное количествоцикл.Примером такого цикла было бы добавление W в качестве дочернего элемента R. Я думал о том, чтобы каждый уровень был связан со списком для упрощения сортировки, но я не уверен, имеет ли это смысл.Есть мысли?