繁体   English   中英

打印树方法中的所有节点

[英]Print all nodes in a tree method

我正在为将所有节点添加到数组列表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);

输出:

约翰·路易斯·苏

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

child.getAllNodes();

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

也许你打算这样做?

names.addAll(child.getAllNodes());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM