📜  计算二叉树奇数级和偶数级节点之和的Java程序(1)

📅  最后修改于: 2023-12-03 14:57:27.486000             🧑  作者: Mango

计算二叉树奇数级和偶数级节点之和的Java程序

本程序实现了计算二叉树奇数级和偶数级节点之和的功能。

算法思路

首先对根节点为第1级,其左右子节点为第2级,以此类推,对每个节点进行奇偶性判断,奇数级节点的和与偶数级节点的和分别累加即可。

具体实现使用了递归的方式,每遍历到一个节点时判断其所在的级别,然后分别累加到奇数和偶数的统计变量中,最终返回两个变量即可。

代码实现
public class BinaryTreeSum {

    private static int oddSum = 0;
    private static int evenSum = 0;

    public static int[] getLevelSum(TreeNode root) {
        oddSum = 0;
        evenSum = 0;
        getSum(root, 1);
        return new int[]{oddSum, evenSum};
    }

    private static void getSum(TreeNode node, int level) {
        if (node == null) {
            return;
        }
        if (level % 2 == 0) {
            evenSum += node.val;
        } else {
            oddSum += node.val;
        }
        getSum(node.left, level + 1);
        getSum(node.right, level + 1);
    }

    // helper class for binary tree node
    private static class TreeNode {
        int val;
        TreeNode left, right;
        TreeNode(int val) {
            this.val = val;
            left = right = null;
        }
    }
}
测试示例
public static void main(String[] args) {
    BinaryTreeSum.TreeNode root = new BinaryTreeSum.TreeNode(1);
    root.left = new BinaryTreeSum.TreeNode(2);
    root.right = new BinaryTreeSum.TreeNode(3);
    root.left.left = new BinaryTreeSum.TreeNode(4);
    root.left.right = new BinaryTreeSum.TreeNode(5);
    root.right.right = new BinaryTreeSum.TreeNode(6);
    int[] result = BinaryTreeSum.getLevelSum(root);
    System.out.printf("Odd level sum: %d\n", result[0]); // 输出结果为 11(1+4+6)
    System.out.printf("Even level sum: %d\n", result[1]); // 输出结果为 8(2+3+5)
}
总结

本程序实现了计算二叉树奇数级和偶数级节点之和的功能,使用了递归的方式实现,代码简洁易懂。