【力扣100】104.二叉树的最大深度

添加链接描述

递归

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        # 思路是递归,因为这个节点的深度就他的左右节点深度的最大值
        if not root:
            return 0
        left_dept=self.maxDepth(root.left)
        right_dept=self.maxDepth(root.right)

        return max(left_dept,right_dept)+1

递归思路:

  1. 当前节点的深度,是他左右节点的深度最大值加自己的1


层序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        # 层序遍历,思路是使用一个队列
        if not root:
            return 0
        q=collections.deque()
        q.append(root)
        ans=0
        while q:
            size=len(q)
            while size>0:
                cur=q.popleft()
                if cur.left:
                    q.append(cur.left)
                if cur.right:
                    q.append(cur.right) 
                size=size-1
            ans=ans+1
        return ans

思路:

  1. 使用一个队列进行层序遍历
  2. 关键代码是size=len(q)这行代码是控制这一层有多少个元素
  3. 然后把这一层的元素分别出队列,这个出队列的节点左右节点加入,为下一层做准备,每出一个节点,就要把size减一
  4. 每遍历一层,就把层数加1

你可能感兴趣的:(leetcode,算法)