Python实现数据结构与算法—— 二叉树的最大深度

题目描述:

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

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

思路1:DFS

树类最值问题,一般都可以用DFS算法。从根节点开始遍历,创建一个包含根节点,栈深度为1的堆栈,到达下一层则推出上一层节点,压入新一层节点,同时深度增加1。用depth记录最大深度,cur_depth记录当前节点位置的深度。每次到达下一层后,depth取max(depth,cur_depth)。代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        searchList = []
        searchList.append((1,root))
        depth = 0
        while searchList:
            cur_depth, node = searchList.pop()
            if node:
                depth = max(depth,cur_depth)
                searchList.append((cur_depth+1,node.left))
                searchList.append((cur_depth+1,node.right))
        return depth

测试结果:
Python实现数据结构与算法—— 二叉树的最大深度_第1张图片

思路2:递归

根据树的关系,可以发现,根节点开始的最大深度其实是下边叶子节点的最大深度加1,以此类推,每一个节点都和下边的叶子节点有类似关系。所以可以利用递归解题:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

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

Python实现数据结构与算法—— 二叉树的最大深度_第2张图片
时间复杂度:O(N)
空间复杂度:O(N)

总结:

树的最值问题通常离不开堆栈和DFS。同时因为树及树的子结构相同,所以对整个树的策略对子树依然有效,所以递归也是经常出现的思路。

你可能感兴趣的:(数据结构与算法)