📌  相关文章
📜  按排序顺序打印二叉树级别 |第 3 组(以数组形式给出的树)(1)

📅  最后修改于: 2023-12-03 15:25:54.081000             🧑  作者: Mango

按排序顺序打印二叉树级别 |第 3 组(以数组形式给出的树)

如果你想要按照排序的顺序来打印出二叉树各个级别的节点,那么可以使用广度优先遍历的算法来实现。在这里,我们针对以数组形式给出的树来介绍如何实现。

数组形式表示二叉树

在数组中以从上到下、从左到右的顺序表示一棵二叉树。如下所示,对于一个树节点为i的二叉树,它的左子节点为2i,右子节点为2i+1,父节点为i/2。

        1
      /   \
     2     3
    / \   / \
   4   5 6   7

以上二叉树在数组中的表示方式为:[1,2,3,4,5,6,7]

广度优先遍历

广度优先遍历算法需要使用到队列的数据结构。对于一个节点a,首先将其加入到队列中,然后依次取出队首节点,访问它的左子节点和右子节点,将这两个节点加入到队列的末尾。递归重复以上步骤,直到队列为空。

实现

下面是按照排序顺序打印二叉树级别的python代码片段。

def levelOrder(tree):
    if not tree:
        return []
    # 队列用于存储节点
    queue, res = [tree], []
    # 当队列不为空
    while queue:
        # 每次从队头取节点
        cur_node = queue.pop(0)
        res.append(cur_node.val)
        # 如果该节点有左子节点,则将左子节点加入队列中
        if cur_node.left:
            queue.append(cur_node.left)
        # 如果该节点有右子节点,则将右子节点加入队列中
        if cur_node.right:
            queue.append(cur_node.right)
    # 返回遍历结果
    return res

以上代码中,tree参数表示以数组形式给出的树的根节点。函数中使用了一个队列queue来存储需要遍历的节点。在循环中,每次取出队首节点,并访问它的左右子节点,将它们加入到队列的末尾。最后,返回遍历结果res