
Java如何统计叶子节点的个数
用户关注问题
什么是二叉树中的叶子节点?
我不太清楚叶子节点的定义,能解释一下在二叉树结构中叶子节点指的是什么吗?
叶子节点的定义
在二叉树中,叶子节点指的是没有子节点的节点,也就是说它既没有左子节点也没有右子节点。通常,叶子节点是树的末端节点,代表数据结构中的终点。
如何用Java程序确定一个树的叶子节点数量?
我想用Java代码来统计树中叶子节点的数量,有哪些常用的算法或方法可以实现?
统计叶子节点的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);
}
有什么非递归的方法可以用Java统计叶子节点吗?
如果想避免递归,能通过迭代或者其他方式实现叶子节点计数吗?
使用迭代遍历统计叶子节点
可以使用队列实现层序遍历,逐个检查节点是否为叶子节点。在遍历过程中,如果节点的左右子节点为空,则该节点为叶子节点,将计数器加一。示例代码:
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;
}