Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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_Recursion_Binary Tree - Fatal编程技术网

在二叉树java中递归创建叶列表

在二叉树java中递归创建叶列表,java,recursion,binary-tree,Java,Recursion,Binary Tree,我的递归函数可以正确计算二叉树中的叶子数: public static int numberOfLeaves(BinaryTree<String> root) { if (root == null) return 0; else if(root.isLeaf()) return 1; int left = numberOfLeaves(root.leftTree); int right = numberOfLeaves(root.rightTree)

我的递归函数可以正确计算二叉树中的叶子数:

public static int numberOfLeaves(BinaryTree<String> root) {

    if (root == null) return 0;
    else if(root.isLeaf()) return 1;
    int left = numberOfLeaves(root.leftTree);
    int right = numberOfLeaves(root.rightTree);
    return (left + right);
}
我可以(如何)使用numberOfLeaves函数的功能/风格来帮助我编写一个递归函数,该函数将汇总列表中所有叶子的数据,并返回它

注: 节点的类型为
BinaryTree

使用
数据
左树
右树
作为实例变量。

您应该添加递归调用返回的叶子:

public ArrayList<String> getDataLeaves(BinaryTree<String> root) {

    ArrayList<String> list = new ArrayList<>();

    if (root == null) 
        return list;
    else if (root.isLeaf()) 
        list.add(root.data);
    else { 
        list.addAll(getDataLeaves(root.leftTree));
        list.addAll(getDataLeaves(root.rightTree));
    }

    return list;
}
public ArrayList getDataLeaves(二进制树根){
ArrayList=新建ArrayList();
if(root==null)
退货清单;
else if(root.isLeaf())
list.add(root.data);
否则{
addAll(getDataLeaves(root.leftTree));
addAll(getDataLeaves(root.rightree));
}
退货清单;
}

对于擅长递归的人来说,这应该是一件容易的事情,因为我的大脑不太习惯递归来帮助我自己。。Thnx previous:)例如,我想对树进行预排序遍历,如果节点是叶子,则将其添加到列表中。我想,我尝试的示例并没有真正做到这一点,因此我的代码中添加的内容不起作用(它不起作用,它在我的9个节点的树中只返回1个节点)。@coders它应该只返回叶节点。树中有多少个叶节点?9个节点的二叉树中有4个叶节点@Eran@coders您确定您的
isLeaf
方法实现正确吗?是的,缺少该方法,需要一个接一个地添加调用。现在可以用了谢谢
public ArrayList<String> getDataLeaves(BinaryTree<String> root) {

    ArrayList<String> list = new ArrayList<>();

    if (root == null) 
        return list;
    else if (root.isLeaf()) 
        list.add(root.data);
    else { 
        list.addAll(getDataLeaves(root.leftTree));
        list.addAll(getDataLeaves(root.rightTree));
    }

    return list;
}