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

标签 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>data , leftTree , RightTree作为实例变量。

最佳答案

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

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

关于java - 在二叉树java中递归创建叶子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339822/

相关文章:

algorithm - 证明: Every absolute binary tree can represent a Huffman series

java - Log4j2 - 为每个附加程序/记录器编写单独的日志文件 - webMethods

java - 如何将字符串中的每个单词大写(java)

python - 为什么必须在递归中使用 return 语句?

postgresql - 在 PostgreSQL 中递归聚合父级

c++ - 二叉树到数组 : Wrong values inserted into Array

java - 使 lucene 中的字段不区分大小写

Java 日历无法正常工作

php - 生成所有可能的二进制组合

algorithm - 使用隐式 key 进行 Treap