• 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.看懂递归代码是一个层面,那么如何去设计递归呢?

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

  • 相关阅读:
    自动从vss下载代码并编译的脚本
    自动执行Sql脚本的批处理
    编译 SharpDevelop2.2源码 经过
    .net框架源代码批量下载器使用方法
    sql server 解决孤立用户问题
    元数据学习分享
    SQL注入攻击的原理及其防范措施(转)
    .Net Remoting和Web Service浅析(转)
    usercontrol 和 page 的继承
    如何提高页面现实速度
  • 原文地址:https://www.cnblogs.com/remly/p/10078282.html
Copyright © 2020-2023  润新知