有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);   
}  

我在网上找不到任何使用第一个版本的东西。 第一个版本错了吗

我试着在纸上追踪它们,它们似乎是一样的。 但我只是想确定一下


共 (2) 个答案

  1. # 1 楼答案

    第一种方法似乎统计树中的所有节点,而第二种方法则统计所有叶子

    实际上,在第一个节点中,当不再有有效的树(root == null)时,递归就会停止,它总是通过添加1(对于当前节点)进入递归检查左树和右树

    第二个只使用条件if (root.left == null && root.right == null)对叶进行计数

    这是假设一个叶被识别为节点,它有一个null{}和一个null{}

  2. # 2 楼答案

    第一个版本不是计算树叶,而是计算节点

    第二个版本确实是在数树叶

    这些方法将而不是返回相同的结果,下面是一个示例:

        root(5)
        /     \
    leaf(3)   leaf(7)
    

    对于这样的树,第一个方法将返回3(节点数),第二个方法将返回2(叶数)