2

我的代码的问题是它正在计算叶节点,但我不认为我知道当 root.left 和 root.right 为空时我需要停止但不太确定如何将其转换为代码。

这是我的代码:

public int countEvenBranches() {
    return countEvenBranches(overallRoot);
}

private int countEvenBranches(IntTreeNode root) {
    if (root == null) {
        return 0;
    } else if (root.data % 2 == 1 ){
        return countEvenBranches(root.left) + countEvenBranches(root.right);
    } else {
        return 1 + countEvenBranches(root.left) + countEvenBranches(root.right);
    }
}
4

2 回答 2

2

如果您只需要确定左右是否为空,那么您可以执行类似的操作

if(root.left == null || root.right == null)
  return 0;
于 2013-06-09T22:10:06.630 回答
1

我最终弄清楚了。检查 root.left 是否等于 null 和 root.right 是否等于 null 检查节点是否有任何子节点。

这是适用于所有情况的解决方案:

private int countEvenBranches(IntTreeNode root) {
    if (root == null) {
        return 0;
    } else if (root.data % 2 == 1 || root.left == null && root.right == null){
        return countEvenBranches(root.left) + countEvenBranches(root.right);
    } else {
        return 1 + countEvenBranches(root.left) + countEvenBranches(root.right);
    }
}
于 2013-06-10T06:02:12.893 回答