有 Java 编程相关的问题?

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

java打印在二叉树上分支

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

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) 个答案

  1. # 1 楼答案

    您可以如下修改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;
        }
    
  2. # 2 楼答案

    通过使用全局变量,并在树上应用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);
    }
    
  3. # 3 楼答案

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