📌  相关文章
📜  获取二叉树中节点的级别 |迭代法(1)

📅  最后修改于: 2023-12-03 14:57:13.553000             🧑  作者: Mango

获取二叉树中节点的级别 | 迭代法

在二叉树中获取节点的级别,可以采用递归和迭代两种方式。本篇文章介绍的是迭代法。

算法思路

迭代法的本质是 BFS(广度优先搜索),通过队列来实现,让每个节点记录当前所在的层数,最终得到所有节点的级别。

  1. 首先将根节点入队,并将其级别设为 0。
  2. 依次出队每个节点,获取其子节点,级别为父节点的级别加 1。
  3. 将子节点入队。
  4. 重复第 2、3 步直到队列为空。
算法实现

以下是实现代码:

def get_node_level(root, target):
    """
    获取二叉树中节点的级别
    :param root: 根节点
    :param target: 目标节点
    :return: 目标节点的级别
    """
    if not root:
        return -1

    # 初始化队列,将根节点入队
    queue = [(root, 0)]

    while queue:
        # 出队队首节点
        node, level = queue.pop(0)
        # 判断当前节点是否为目标节点
        if node.value == target:
            return level
        # 将当前节点的左右子节点和它们的级别入队
        if node.left:
            queue.append((node.left, level + 1))
        if node.right:
            queue.append((node.right, level + 1))

    # 没有找到目标节点
    return -1
算法分析
  • 时间复杂度:O(n),遍历所有节点的时间复杂度为 O(n)。
  • 空间复杂度:O(n),队列的最大长度为 n/2,在完全二叉树的情况下为 O(n)。
总结

通过迭代法,能够非常方便快捷地获取二叉树中节点的级别,时间复杂度和空间复杂度都非常优秀。建议使用该方法来解决相关问题。