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

时间:2019-05-28 10:10:02

标签: 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);
    return (left + right);
}

但是现在我想在List中汇总所有叶子的数据,并返回

看看我的绝望尝试:

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 if(root.leftTree != null ) getDataLeaves(root.leftTree);
    else getDataLeaves(root.rightTree);

    return list;
}

我(如何)可以使用我的 numberOfLeaves 函数的功能/样式来帮助我编写一个递归函数,该函数将汇总所有叶子的数据在列表中并返回它。

注意: 节点的类型为BinaryTree<String> 使用dataleftTreeRightTree作为实例变量。

1 个答案:

答案 0 :(得分:1)

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

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