美文网首页
23二叉树的最大深度

23二叉树的最大深度

作者: Jachin111 | 来源:发表于2020-08-06 12:58 被阅读0次

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

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

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

  3
  / \
9 20
   / \
  15 7
返回它的最大深度 3 。

BFS,层次遍历最后得到的深度就是最大的深度
DFS与BFS有两点不同:
最后得到的深度不一定是最大深度,所以要用max判断
DFS(先序遍历)节点右孩子先入栈,左孩子再入栈`

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        # BFS
        if root is None:
            return 0
        queue = [(1, root)]
        while queue:
            depth, node = queue.pop(0)
            if node.left:
                queue.append((depth+1,node.left))
            if node.right:
                queue.append((depth+1,node.right))
        return depth
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
         # DFS
        if root is None:
            return 0
        stack = [(1, root)]
        depth = 0
        while stack:
            cur_dep, node = stack.pop()
            depth = max(depth, cur_dep)
            if node.right:
                stack.append((cur_dep+1,node.right))
            if node.left:
                stack.append((cur_dep+1,node.left))
        return depth

递归+BFS

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        tmp, ret = [root], 1
        while tmp:
            ret, tmp = ret+1, sum([([i.left] if i.left else [])+([i.right] if i.right else []) for i in tmp], [])
        return ret-1

递归+DFS

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

解题思路
1,构建一个队列,然后把树放进去
2,利用队列的特性,一层一层读取树的元素,每读取一层,层数加1
3,直到所有层遍历完毕,输出层数

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root == None:
            return 0
        stack = [root]
        i = 0
        while len(stack) != 0:
            n = len(stack)
            i += 1
            # print(stack)
            for k in range(n):
                temp = stack.pop(0)
                if temp.left:
                    stack.append(temp.left)
                if temp.right:
                    stack.append(temp.right)
        return i 

来源:力扣(LeetCode)

相关文章

  • 二叉树面试题基本问题

    二叉树的最大深度与最小深度 二叉树的最大深度 最大深度是指二叉树根节点到该树叶子节点的最大路径长度。而最小深度自然...

  • 二叉树最大最小深度的递归非递归实现

    一、二叉树最大深度 二叉树的最大深度是根节点到叶子节点的最大长度 1.1 最大深度的递归实现 传入根节点,得到左右...

  • 104. Maximum Depth of Bianry Tre

    题目 求二叉树的最大深度 解析 二叉树的最大深度,是左子树深度加 1 和右子树深度加 1 的最大值。即 f(nod...

  • 二叉树的深度系列

    LeetCode 104 二叉树的最大深度 题目 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节...

  • LeetCode-104-二叉树的最大深度

    LeetCode-104-二叉树的最大深度 104. 二叉树的最大深度[https://leetcode-cn.c...

  • LeetCode | 树相关题目

    LeetCode 104.二叉树的最大深度 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最...

  • LeetCode 深度优先遍历

    概述 前言 104 二叉树的最大深度【简单】 111 二叉树的最小深度 【简单】 124 二叉树中的最大路径和 【...

  • leetcode上二叉树和递归 java

    二叉树天然的递归结构104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节...

  • Swift 二叉树的最大深度- LeetCode

    题目: 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点...

  • (初级)4.二叉树的最大深度

    二叉树的最大深度给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明:...

网友评论

      本文标题:23二叉树的最大深度

      本文链接:https://www.haomeiwen.com/subject/jycsrktx.html