📌  相关文章
📜  打印给定二叉树的每一层中除最左边节点之外的所有节点(1)

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

打印给定二叉树的每一层中除最左边节点之外的所有节点

在二叉树中,每一层中除最左边节点之外的所有节点可以通过广度优先搜索算法遍历到。这个算法可以使用队列来实现。

具体实现可以按照以下步骤完成:

  1. 首先定义一个队列,将根节点加入队列中。
  2. 对于队列中的每一个节点,判断它是否为当前层中的最左边节点。如果是,则将它打印出来;否则,将它的左右子节点加入队列中。
  3. 当队列为空时,表示二叉树中的所有节点已经遍历完成。

以下是代码实现:

from collections import deque

def print_except_leftmost(root):
    if not root:
        return

    queue = deque()
    queue.append(root)

    while queue:
        size = len(queue)
        is_leftmost = True

        for i in range(size):
            node = queue.popleft()

            if is_leftmost:
                print(node.val, end='')
                is_leftmost = False
            else:
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)

                if i < size - 1:
                    print(f'->{node.val}', end='')

        print('')

代码中使用了 deque 类型的队列,它提供了高效的队列操作。在每一层的遍历中,使用 is_leftmost 变量来判断当前节点是否为最左边节点,并确保只有最左边节点被打印。

我们可以使用以下方式来测试这个函数:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

tree = TreeNode(1,
                TreeNode(2,
                         TreeNode(4),
                         None),
                TreeNode(3,
                         TreeNode(5),
                         TreeNode(6)))

print_except_leftmost(tree)

这将输出如下内容:

1
2->3
4->5->6

以上代码片段均按照 markdown 格式进行了标注。