力扣刷题Python笔记:二叉树的最大深度

题目

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

力扣刷题Python笔记:二叉树的最大深度_第1张图片
来源:力扣(LeetCode)

Python解法

层序遍历解法(广度优先遍历)

这道题用昨天层序遍历的思路就能很轻松地解出来,层序遍历的每一层都分别在一个列表里,那我们只要知道有几个列表就能知道最多有几层,即二叉树的最大深度。

代码如下:

def maxDepth(self, root: TreeNode) -> int:
    queue = [root]
    result = 0
    while queue:
        n = len(queue)
        mid = []
        for i in range(n):
            cur = queue.pop(0)
            if not cur:
                continue
            mid.append(cur.val)
            queue.extend([cur.left,cur.right])
        if mid:
            result += 1
    return result

题解里给出了该解法的另外一种代码实现:

def maxDepth(self, root: TreeNode) -> int:
    if not root:
        return 0
    result = 0
    queue = [root]
    while queue:
        result += 1
        next_layer = []
        while queue:
            node = queue.pop(0)
            if node.left:
                next_layer.append(node.left)
            if node.right:
                next_layer.append(node.right)
        queue = next_layer
    return result

回溯解法(深度优先遍历)

看了题解里的回溯解法觉得大佬是真的牛逼,一条语句就能解出来:

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

你可能感兴趣的:(力扣python刷题,算法)