104. 二叉树的最大深度

<递归解法><深搜><DFS>

题目描述


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

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

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

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

    3
   / 
  9  20
    /  
   15   7

返回它的最大深度 3 。

解题思路 


 迭代1

借助额外变量,广搜

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        deep=0
        que=[]
        que.append(root)
        if root is None:
            return 0
        while len(que):
            ActDeepLength=len(que)
            #设计一个循环把这一层的节点全pop出去,外循环则从下一层的节点开始
            while ActDeepLength:
                ActNode=que.pop(0)
                ActDeepLength-=1  
                if ActNode.left is not None:
                    que.append(ActNode.left)
                if ActNode.right is not None:
                    que.append(ActNode.right)
            deep+=1
        return deep

迭代2

借助额外空间,广搜

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        deep=0
        que=[]
        que.append(root)
        if root is None:
            return 0
        while len(que):
            #构造一个容器nextque来装当前节点下一层的所有元素
            nextque=[]
            for node in que:
                if node.left is not None:nextque.append(node.left)
                if node.right is not None:nextque.append(node.right)
            #下次循环就遍历下一层的元素
            que=nextque
            deep+=1
        return deep

 

递归!!

在leetcode题解看到一篇文章:用一个递归套路来解决二叉树路径问题。

文章提到自底向上的思考方法,符合这道题的官方题解思路。

def maxDepth(self, root):
    """
    :type root: TreeNode
    :rtype: int
    """
    if not root:
        return 0
    left = self.maxDepth(root.left)
    right = self.maxDepth(root.right)
    return max(left,right)+1

总结


 1.看懂递归代码是一个层面,那么如何去设计递归呢?

这是我一直疑惑的点,代码层面已经能够理解,个人认为下一步应该多刷题,见识各种各样的递归设计思路,期待量变到质变。

原文地址:https://www.cnblogs.com/remly/p/10078282.html