打印树叶并返回树中的叶子数

时间:2014-05-10 03:44:40

标签: recursion binary-tree

我在Java中编写一个递归方法,试图打印所有叶子并返回二叉树的叶子数。 这是我的代码:

public int printAndCountLeaves(Node nd)
{
    int size = 0;
    Node left = nd.getLeft();
    Node right = nd.getRight();
    if(left != null && right != null)
        {
            size = size + printAndCountLeaves(left);
            size = size + printAndCountLeaves(right);
        }
        else
        {
            System.out.println(data);
            return (size + 1);
        }

    return size;

}

这是节点类:

public class Node
{
    double data;
    Node left;//left child
    Node right;//right child
    Node parent;
    //Assume proper constructors and getters
}

我的代码是否可以用于打印所有叶子并返回完整二叉树的叶子数?

2 个答案:

答案 0 :(得分:0)

每次进行递归调用时,您肯定需要添加1来计数,而不仅仅是在其子节点为空时。此外,如果您发送方法的树为空,您可能需要进行一些错误检查。此外,每次在if语句中按照现在的方式打印节点,它只打印底部的节点。

size++;
size += printAndCountLeaves(left) + printAndCountLeaves(right);

答案 1 :(得分:0)

我想这可能是更简单的递归方法来打印/只计算二叉树的叶节点。我们可以对任何树进行概括。

class Node {
    int key;
    Node left, right;

    public Node() {}

    public Node(int key) {
        this.key = key;
    }
}

// Consider this is global
List<Integer> list = new ArrayList<>();

void findLeaves(Node node) {
    if (null == node) return;

    findLeaves(node.left);

    if (null == node.left && null == node.right) list.add(node.key);

    findLeaves(node.right);
}