📌  相关文章
📜  在由值1组成的节点组成的二叉树中计数级别(1)

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

计算由值1组成的节点组成的二叉树层数

若二叉树中只有值为1的节点,如何计算它的层数呢?这里提供两种方法。

方法一:递归法

递归是二叉树的常用解题方法,其基本思想是把整个问题分解为同样的子问题。对于计算二叉树的深度,可以用递归的方式,分别计算左子树和右子树的深度,然后取较大者加1即可。代码如下:

def depth(root: TreeNode) -> int:
    if not root:
        return 0 
    left_depth = depth(root.left)
    right_depth = depth(root.right)
    return max(left_depth, right_depth) + 1

时间复杂度为 $O(n)$,其中 $n$ 为二叉树的节点个数。

方法二:层次遍历法

层次遍历是按层次逐个访问树结点的方法,即先访问根结点,然后依次访问其下一层的所有结点,再依次访问下下层的所有结点,以此类推,直至所有结点均被访问为止。当一层遍历结束后,我们就能得到当前层的结点数,层数加1。代码如下:

def depth(root: TreeNode) -> int:
    if not root:
        return 0 
    level_queue = [root]
    depth = 0
    while level_queue:
        depth += 1 
        n = len(level_queue)
        for i in range(n):
            node = level_queue.pop(0)
            if node.left:
                level_queue.append(node.left)
            if node.right:
                level_queue.append(node.right)
    return depth

时间复杂度为 $O(n)$,其中 $n$ 为二叉树的节点个数。

总结

以上两种方法都可以计算二叉树的深度,且时间复杂度均为 $O(n)$。使用哪种方法取决于实际应用环境和需求。如果只是简单地计算深度,建议使用层次遍历法。如果问题需要更复杂的解决方案,递归法可以提供更大的灵活性和可扩展性。