Java 在二叉树上打印分支

Java 在二叉树上打印分支,java,recursion,data-structures,binary-tree,Java,Recursion,Data Structures,Binary Tree,如何计算分支数,在本例中,分支数为偶数整数。这是我到目前为止所拥有的。它似乎适用于几个案例 public int evenBranches() { return evenBranches(overallRoot); } private int evenBranches(IntTreeNode root) { if (root == null) { return 0; } int val = 0; if (root.left != nul

如何计算分支数,在本例中,分支数为偶数整数。这是我到目前为止所拥有的。它似乎适用于几个案例

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

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

检查右分支中的引用时,可能需要删除else条件。否则它将只检查一侧。例如:

private int evenBranches(IntTreeNode root) {
    if (root == null) {
        return 0;
    } 
    int val = 0;
    if (root.left != null) {
        val += evenBranches(root.left);
    } 

    if (root.right != null) {
        val += evenBranches(root.right);
    }
    if (root.data % 2 == 0) {
        return val + 1;
    } else {
        return val;
    } 
}

您可以如下修改evenBranchs()方法:我认为它将覆盖所有边缘情况,如果剩下任何测试情况,请告诉我,我会修复它

    public int evenBranches() {
        return evenBranches(overallRoot, 0);
    }

    private int evenBranches(IntTreeNode root, int count) {
        if(root == null || (root.left == null && root.right == null)) {
            return count;
        }
        if(root.data % 2 == 0) {
            count++;
        }
        count += evenBranches(root.left, count);
        count += evenBranches(root.right, count);
        return count;
    }

通过使用全局变量并在树上应用BFS(广度优先搜索),可以很好地获得所需的结果,方法如下:

int evencount = 0; // global-var.
public int evenBranches() {
    evenBranches(overallRoot);
    return evencount;
}
private void evenBranches(IntTreeNode root) {
    if(!root) return;
    if( (root.left || root.right) && (root.data % 2 == 0)){
        evencount++;
    }
    evenBranches(root.left);
    evenBranches(root.right);
}

我不明白题目是什么,“打印分支”?“计算“当然?”这似乎适用于几个案例。“那个么,哪些案例,我假设你们已经找到了一个它不适用的案例,那个就是呢?”提示:这是一个学习单元测试的好机会。甚至当您不使用JUnit时,您可能仍然值得考虑编写小部分测试代码。您知道:就像生成具有已知布局的专用树,然后在其上运行代码并检查返回的数字。从小示例开始,当出现问题时,可以在调试器中运行该测试。这就是你系统地解决这些问题的方法。此外:请查看帮助中心,了解问题中的“缺失部分”。