【问题标题】:Print all nodes in a tree method打印树方法中的所有节点
【发布时间】:2015-10-17 08:46:32
【问题描述】:

我正在为将所有节点添加到数组列表names 的树创建递归方法。此方法无法将叶节点(没有子节点的节点)添加到数组列表names

它只将根和根的直接子级添加到数组列表中。为了解决其他递归问题,我需要知道出了什么问题。

private ArrayList<TreeNode> names = new ArrayList<>();
public ArrayList<TreeNode> getAllNodes(){

    //BASIS CASES:
    names.add(this);

    if(isLeaf()){
        names.add(this);
        return names;
    }

    //RECURSIVE CASES:
    for(TreeNode child : children){
        child.getAllNodes();
        names.add(child);

    }

    return names;
}

其他代码:

 //prints the nodes out
 ArrayList<TreeNode> theNodes = treeRoot.getAllNodes();
                System.out.println("");
                for (TreeNode n : theNodes) System.out.print(n.getLabel() + " ");
                repaintCanvas(canvas);

//hard coded nodes
treeRoot = new TreeNode(TreeNode.Gender.MALE, "John", null);
        itemsToDraw.add(treeRoot);

        TreeNode Louis = new TreeNode(TreeNode.Gender.MALE, "Louis", treeRoot);
        TreeNode Sue = new TreeNode(TreeNode.Gender.FEMALE, "Sue", treeRoot);
        TreeNode Anne = new TreeNode(TreeNode.Gender.FEMALE, "Anne", Sue);
        TreeNode Sam = new TreeNode(TreeNode.Gender.MALE, "Sam", Sue);
        TreeNode Anne2 = new TreeNode(TreeNode.Gender.FEMALE, "Anne", Sam);
        TreeNode Ed = new TreeNode(TreeNode.Gender.MALE, "Ed", Louis);
        TreeNode Frank = new TreeNode(TreeNode.Gender.MALE, "Frank", Louis);

输出:

约翰·路易斯·苏

【问题讨论】:

    标签: java debugging recursion


    【解决方案1】:

    我相信基本问题是当你这样做时:

    child.getAllNodes();
    

    您没有使用该方法的响应...

    也许你打算这样做?

    names.addAll(child.getAllNodes());
    

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      相关资源
      最近更新 更多