Предзаказ обхода дерева

Я реализовал метод для предварительного обхода дерева, которое не является двоичным деревом. Каждый родительский узел этого дерева имеет массив дочерних элементов, поэтому этот метод я использую:

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".

Другие вопросы по тегам