java计算树中叶子的两个版本
这两个版本有什么不同
public static int countLeaves(IntTreeNode root) {
if (root == null) {
return 0;
} else
return 1 + countLeaves(root.left) + countLeaves(root.right);
}
public static int countLeaves(IntTreeNode root) {
if (root == null) {
return 0;
} else if (root.left == null && root.right == null) {
return 1;
} else
return countLeaves(root.left) + countLeaves(root.right);
}
我在网上找不到任何使用第一个版本的东西。 第一个版本错了吗
我试着在纸上追踪它们,它们似乎是一样的。 但我只是想确定一下
# 1 楼答案
第一种方法似乎统计树中的所有节点,而第二种方法则统计所有叶子
实际上,在第一个节点中,当不再有有效的树(
root == null
)时,递归就会停止,它总是通过添加1
(对于当前节点)进入递归检查左树和右树第二个只使用条件
if (root.left == null && root.right == null)
对叶进行计数这是假设一个叶被识别为节点,它有一个}和一个}
null
{null
{# 2 楼答案
第一个版本不是计算树叶,而是计算节点
第二个版本确实是在数树叶
这些方法将而不是返回相同的结果,下面是一个示例:
对于这样的树,第一个方法将返回3(节点数),第二个方法将返回2(叶数)