在二叉树上打印分支

时间:2016-06-07 07:45:50

标签: 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 != 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;
    } 
}

enter image description here

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在检查右分支中的事件时,可能需要删除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;
    } 
}

答案 2 :(得分:0)

通过使用全局变量并以这种方式在树上应用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);
}