使用java语言打印一颗满二叉树
时间: 2023-10-17 14:05:12 浏览: 39
好的,我可以给您提供一个Java语言的示例代码,用于打印一颗满二叉树。假设我们已经有了一颗用数组表示的满二叉树,其中根节点的索引为0,左子节点的索引为2*i+1,右子节点的索引为2*i+2(其中i为节点在数组中的索引),则可以按照如下方式打印这棵树:
```java
public static void printFullBinaryTree(int[] tree) {
int depth = (int) (Math.log(tree.length) / Math.log(2)); // 计算树的深度
int maxWidth = (int) Math.pow(2, depth) - 1; // 计算树的最大宽度
int nodeWidth = 2; // 节点的宽度
int paddingWidth = (maxWidth - nodeWidth) / 2; // 节点之间的空白宽度
for (int i = 0; i < depth; i++) {
int levelStartIndex = (int) Math.pow(2, i) - 1; // 当前层的起始索引
int levelEndIndex = (int) Math.pow(2, i + 1) - 2; // 当前层的结束索引
for (int j = levelStartIndex; j <= levelEndIndex; j++) {
printPadding(paddingWidth); // 打印节点之间的空白
System.out.printf("%2d", tree[j]); // 打印节点的值
printPadding(paddingWidth); // 打印节点之间的空白
}
System.out.println(); // 换行
paddingWidth = (paddingWidth - nodeWidth) / 2; // 计算下一层节点之间的空白宽度
}
}
private static void printPadding(int width) {
for (int i = 0; i < width; i++) {
System.out.print(" ");
}
}
```
例如,对于数组[1, 2, 3, 4, 5, 6, 7],调用printFullBinaryTree方法会输出如下内容:
```
1
2 3
4 5 6 7
```
希望这个示例代码能够帮助您!