23二叉树的最大深度

2020-08-06  本文已影响0人  Jachin111

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

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

示例:
给定二叉树 [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)

上一篇 下一篇

猜你喜欢

热点阅读