📅  最后修改于: 2023-12-03 15:10:01.913000             🧑  作者: Mango
在二叉树中,中间层指的是既不是树的根节点也不是叶节点的层级。现在我们的任务是打印完美二叉树的中间层,但是我们不知道二叉树的高度。本文将为您介绍如何在不求高度的情况下打印完美二叉树的中间层,并提供相应的代码实现。
完美二叉树是指除了叶子节点外,每个节点都有两个子节点且深度相等的二叉树。完美二叉树的高度为$H$,则叶子节点的深度为$H+1$。
我们可以使用层序遍历(BFS)的方式遍历二叉树。在遍历的过程中,我们在队列中保留每一层的节点。当遍历到最后一层时,我们就找到了二叉树的高度,然后我们就可以轻易地计算出中间层的位置,从而打印出中间层的节点。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_middle_layer(root):
if not root:
return None
queue = [root]
i = 0
while queue:
size = len(queue)
level_nodes = []
for j in range(size):
node = queue.pop(0)
level_nodes.append(node)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
if i == (size - 1) // 2:
for node in level_nodes:
print(node.val, end=' ')
return
i += 1
class Node {
constructor(val, left, right) {
this.val = val;
this.left = left;
this.right = right;
}
}
function printMiddleLayer(root) {
if (!root) {
return null;
}
const queue = [root];
let i = 0;
while (queue.length) {
const size = queue.length;
const levelNodes = [];
for (let j = 0; j < size; j++) {
const node = queue.shift();
levelNodes.push(node);
if (node.left) {
queue.push(node.left);
}
if (node.right) {
queue.push(node.right);
}
}
if (i === Math.floor((size - 1) / 2)) {
const results = levelNodes.map(node => node.val).join(' ');
console.log(results);
return;
}
i++;
}
}
通过本文,您已经学会了如何在不求高度的情况下,打印出完美二叉树的中间层。无论是处理完美二叉树还是不完美的二叉树,层序遍历是一种非常有效的方式来遍历二叉树。