【问题标题】:Preorder traversal of a tree树的前序遍历
【发布时间】:2014-12-20 15:45:55
【问题描述】:

我已经实现了一种对树进行前序遍历的方法,该树不是二叉树。这棵树的每个父节点都有一个子节点数组,所以这是我正在使用的方法:

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);

【问题讨论】:

  • 也许你的错误在于树的构建
  • 大概 'childern' 是空的。

标签: recursion tree multiway-tree


【解决方案1】:

您永远不会向任何节点的childern 列表添加任何内容。您创建了一个名为 AA_childern 的 ArrayList,但它没有连接到树,并且树不知道也不关心它的存在。这些子节点需要添加到tnAA.childern

附:正确的拼写是“children”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多