📅  最后修改于: 2023-12-03 14:57:27.486000             🧑  作者: Mango
本程序实现了计算二叉树奇数级和偶数级节点之和的功能。
首先对根节点为第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)
}
本程序实现了计算二叉树奇数级和偶数级节点之和的功能,使用了递归的方式实现,代码简洁易懂。