返回

919. 完全二叉树插入器:简单 BFS 运用题

后端

随着软件系统的不断发展,处理二叉树数据结构的需求也随之增加。LeetCode 上的 919. 完全二叉树插入器 题目正是与二叉树相关的经典问题。这道题目难度为中等,需要我们充分理解完全二叉树的特性,并熟练运用广度优先搜索(BFS)算法。

完全二叉树与 BFS

完全二叉树 是指一棵高度平衡的二叉树,每一层(除最后一层外)都完全填充,即每个节点都有左右子节点。BFS 算法是一种遍历二叉树的有效方法,它以层级方式访问节点,从根节点开始,逐层向下探索。

题目要求

给定一个完全二叉树的根节点 root,以及一个要插入的值 val。要求我们设计一个完全二叉树插入器,实现以下功能:

  • Insert(int val):将 val 插入完全二叉树中,并返回新节点的父节点。
  • Get_root():返回完全二叉树的根节点。

算法步骤

  1. BFS 查找插入位置 :从根节点开始 BFS,逐层向下探索,直到找到第一个没有左右子节点的节点 p。这个节点就是新节点 val 的父节点。
  2. 插入新节点 :将 val 作为 p 的左子节点或右子节点,保证完全二叉树的性质。
  3. 更新父节点 :将 p 作为新节点的父节点。

代码实现

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

class CBTInserter:
    def __init__(self, root):
        self.root = root
        self.queue = [root]

    def insert(self, val):
        new_node = Node(val)

        # 找到要插入的位置
        while self.queue:
            node = self.queue.pop(0)
            if not node.left:
                node.left = new_node
                self.queue.append(new_node)
                return node
            elif not node.right:
                node.right = new_node
                self.queue.append(new_node)
                return node

    def get_root(self):
        return self.root

示例

给定一个完全二叉树的根节点 root,其中 root.val = 1

          1
         / \
        2   3
       / \   \
      4   5   6

插入 val = 7 后,完全二叉树变为:

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

总结

  1. 完全二叉树插入器 题目考察了我们对完全二叉树性质的理解和 BFS 算法的运用。通过结合这两方面知识,我们可以高效地设计一个完全二叉树插入器。希望本文能帮助大家更好地理解这道题目,提升自己的算法技能。