📅  最后修改于: 2023-12-03 15:02:06.224000             🧑  作者: Mango
在计算一颗树中叶节点的数量时,需要遍历树的每个节点,统计叶节点的数量。下面我们给出一份Java程序来实现此功能。
我们定义一个树节点类 TreeNode
来描述每个节点。每个节点包括一个值 val
和两个子节点 left
和 right
,如果子节点不存在,我们用 null
表示。
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
我们可以使用递归的方法来遍历树的每个节点,并统计叶节点的数量。
public class Solution {
public int countLeaves(TreeNode root) {
if (root == null) {
// 如果根节点为空,返回0
return 0;
} else if (root.left == null && root.right == null) {
// 如果当前节点是叶节点,返回1
return 1;
} else {
// 否则,递归遍历子节点
return countLeaves(root.left) + countLeaves(root.right);
}
}
}
代码中,countLeaves
方法接收一个根节点 root
,返回树中叶节点的数量。首先,我们判断根节点是否为空,如果是,则直接返回 0。如果不是,我们再判断当前节点是否是叶节点,即左右子节点均为空,如果是,则返回 1。否则,递归遍历当前节点的左右子节点,并返回他们的叶节点数量之和。
下面的示例程序展示了如何使用上述算法计算树中叶节点的数量。这里我们构造一颗二叉树作为输入,并输出这棵树的叶节点数量。
public class Main {
public static void main(String[] args) {
// 构造一颗二叉树
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
// 计算叶节点的数量
Solution solution = new Solution();
int count = solution.countLeaves(node1);
// 输出结果
System.out.println("树的叶节点数量为:" + count);
}
}
运行结果如下:
树的叶节点数量为:3
在这个例子中,我们构造了如下的一颗二叉树。
1
/ \
2 3
/ \
4 5
这棵树中包括 3 个叶节点,分别是 4、5 和 3。使用我们的计算方法,得到的结果也是 3,证明了我们的算法是正确的。
在计算树中叶节点的数量时,我们可以使用递归的方法来遍历树的每个节点,并统计叶节点的数量。这一算法在计算树中节点数量、深度等问题中也得到了广泛的应用。