怎么从上到下一层一层打印二叉树的代码
时间: 2023-03-11 11:25:36 浏览: 79
您可以使用递归算法来实现这一目标。假设您有一个二叉树root,那么您可以使用以下代码:def printTree(root):
if root is not None:
print(root.data)
printTree(root.left)
printTree(root.right)
相关问题
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行,数据之间用一个空格分隔,行尾无多余空格。
好的,这是一个经典的二叉树层序遍历问题。我可以给出一种基于队列的算法来解决。
首先,我们需要一个队列,用于存储当前层的节点。我们先将根节点入队。然后,我们进行循环,直到队列为空。在每次循环中,我们先记录当前队列的大小,然后遍历这个大小的节点,将这些节点的左右子节点入队。同时,我们将这些节点的值记录下来,最后将这些值输出即可。这样就可以保证按层输出,并且每一层输出一行。
下面是具体的实现代码,你可以参考一下:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def printTree(root):
if not root:
return []
res = []
queue = [root]
while queue:
size = len(queue)
level = []
for i in range(size):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(level)
return res
```
这样,你就可以通过调用 `printTree` 函数来输出按层打印的二叉树了。
使用java语言打印一颗满二叉树
好的,我可以给您提供一个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
```
希望这个示例代码能够帮助您!