Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打印树方法中的所有节点_Java_Debugging_Recursion - Fatal编程技术网

Java 打印树方法中的所有节点

Java 打印树方法中的所有节点,java,debugging,recursion,Java,Debugging,Recursion,我正在为一棵树创建一个递归方法,该树将所有节点添加到数组列表名称。此方法无法将叶节点(没有子节点的节点)添加到arraylist名称 它只将根和根的直接子级添加到数组列表中。为了解决其他递归问题,我需要知道出了什么问题 private ArrayList<TreeNode> names = new ArrayList<>(); public ArrayList<TreeNode> getAllNodes(){ //BASIS CASES: n

我正在为一棵树创建一个递归方法,该树将所有节点添加到数组列表
名称
。此方法无法将叶节点(没有子节点的节点)添加到arraylist
名称

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

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;
}
private ArrayList name=new ArrayList();
公共ArrayList getAllNodes(){
//基本情况:
名称。添加(本);
if(isLeaf()){
名称。添加(本);
返回姓名;
}
//递归情况:
for(TreeNode儿童:儿童){
getAllNodes();
姓名。添加(儿童);
}
返回姓名;
}
其他代码:

 //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);
//打印出节点
ArrayList theNodes=treeRoot.getAllNodes();
System.out.println(“”);
对于(TreeNode n:theNodes)System.out.print(n.getLabel()+);
重新绘制画布(画布);
//硬编码节点
treeRoot=新的TreeNode(TreeNode.Gender.MALE,“John”,空);
itemsToDraw.add(treeRoot);
TreeNode Louis=新的TreeNode(TreeNode.Gender.MALE,“Louis”,treeRoot);
TreeNode Sue=新的TreeNode(TreeNode.Gender.femal,“Sue”,treeRoot);
TreeNode Anne=新的TreeNode(TreeNode.Gender.femal,“安妮”,苏);
TreeNode Sam=新的TreeNode(TreeNode.Gender.MALE,“Sam”,Sue);
TreeNode Anne2=新的TreeNode(TreeNode.Gender.femal,“安妮”,萨姆);
TreeNode Ed=新的TreeNode(TreeNode.Gender.MALE,“Ed”,路易);
TreeNode Frank=新的TreeNode(TreeNode.Gender.MALE,“Frank”,路易斯);
输出:

约翰·路易斯·苏


我认为最基本的问题是当你这样做的时候:

child.getAllNodes();
您没有使用该方法的响应

也许你是有意的

names.addAll(child.getAllNodes());