剑指 Offer 55 - I. 二叉树的深度

134 阅读1分钟

题目描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:
给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3

解题思路1: 递归法

直接对root进行递归, 然后判断左右子树哪个深度大进行取值, 并且加上自身的一层, 得到最后结果

示例代码1:

def maxDepth2self, root: TreeNode) -> int:
    if not root:
        return 0
    return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

解题思路2: BFS

使用队列对二叉树进行广度优先遍历(层序遍历), 每次遍历时进行深度 +1. 因为不需要进行每个节点的遍历, 所以可以直接简单的将每层的结果进行替换, 继续下一层遍历

示例代码2:

def maxDepth(self, root: TreeNode) -> int:
    if not root:
        return 0
    queue, res = [root], 0
    while queue:
        temp = []
        for item in queue:
            if item.left:
                temp.append(item.left)
            if item.right:
                temp.append(item.left)

        queue = temp
        res += 1
    return res