Java如何统计叶子节点的个数

Java如何统计叶子节点的个数

作者:William Gu发布时间:2026-02-27阅读时长:0 分钟阅读次数:3

用户关注问题

Q
什么是二叉树中的叶子节点?

我不太清楚叶子节点的定义,能解释一下在二叉树结构中叶子节点指的是什么吗?

A

叶子节点的定义

在二叉树中,叶子节点指的是没有子节点的节点,也就是说它既没有左子节点也没有右子节点。通常,叶子节点是树的末端节点,代表数据结构中的终点。

Q
如何用Java程序确定一个树的叶子节点数量?

我想用Java代码来统计树中叶子节点的数量,有哪些常用的算法或方法可以实现?

A

统计叶子节点的Java方法

一种常见的方法是通过递归遍历树的每个节点,如果当前节点没有左子树和右子树,就将计数器加一。递归访问所有节点后,计数器的值即为叶子节点的个数。代码示例:

int countLeaves(TreeNode node) {
    if (node == null) return 0;
    if (node.left == null && node.right == null) return 1;
    return countLeaves(node.left) + countLeaves(node.right);
}
Q
有什么非递归的方法可以用Java统计叶子节点吗?

如果想避免递归,能通过迭代或者其他方式实现叶子节点计数吗?

A

使用迭代遍历统计叶子节点

可以使用队列实现层序遍历,逐个检查节点是否为叶子节点。在遍历过程中,如果节点的左右子节点为空,则该节点为叶子节点,将计数器加一。示例代码:

int countLeavesIterative(TreeNode root) {
    if (root == null) return 0;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root);
    int count = 0;
    while (!queue.isEmpty()) {
        TreeNode current = queue.poll();
        if (current.left == null && current.right == null) {
            count++;
        }
        if (current.left != null) queue.add(current.left);
        if (current.right != null) queue.add(current.right);
    }
    return count;
}