Предзаказ обхода дерева
Я реализовал метод для предварительного обхода дерева, которое не является двоичным деревом. Каждый родительский узел этого дерева имеет массив дочерних элементов, поэтому этот метод я использую:
void preorderTraversal(TreeNode tree)
{
if (tree == null)
return;
System.out.print(tree.element + " ");
for(TreeNode child : tree.childern) // children is an Arraylist
{
preorderTraversal(child);
}
}
Пример привязки дочерних узлов к родительскому "tnAA"
/* Creating Object of class tree*/
Tree tree = new Tree();
tree.setRoot(tnAA);
TreeNode root2 = tree.getRoot();
/* creating the links between nodes of Tree*/
ArrayList<TreeNode> AA_children = new ArrayList<TreeNode>();
AA_children.add(tnBB);
AA_children.add(tnCC);
AA_children.add(tnDD);
tnBB.parent=tnAA; tnCC.parent = tnAA; tnDD.parent = tnAA;
// Tree
// A
// / | \
// B C D
// /\ |
// E F G
Но он выводит только корневой узел, что не так с этим методом?
Решение: связывание массива дочерних элементов с каждым родителем: tnAA.setChildern(AA_childern);
1 ответ
Решение
Вы никогда ничего не добавляете ни к одному узлу childern
список. Вы создаете ArrayList с именем AA_childern
, но оно не связано с деревом, и дерево не знает и не заботится о том, что оно существует. Эти дочерние узлы должны быть добавлены в tnAA.childern
,
PS Правильное написание "childre n".