zoukankan      html  css  js  c++  java
  • Leetcode刷题10.22——二叉树的(最大)深度 & 二叉树的直径

    leetcode 104 二叉树的(最大)深度

      此题有很多种做法,这里主要记录递归的方法。二叉树的最大深度即是每个节点左右节点中较大的深度加1,按这种方法递归直到根节点就能找出最大深度,代码非常直观简单。

      遇到递归日常思考:

    1. 输入是什么:要求最大深度的根节点
    2. 输出是什么:当前根节点下的最大深度
    3. 该递归函数的功能是什么:求出当前根节点的最大深度
    class Solution:
        def maxDepth(self, root: TreeNode) -> int:
            if not root:
                return 0
            else:
                return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

    leetcode 543 二叉树的直径

      此题看起来跟上一题非常相似,仔细想一下实际上就是多了一个把左右节点最大深度相加的步骤。另外,可以在计算的时候仍然按照节点的深度来算,最后的结果减一即可,这样会简化很多思考的步骤,也可以直接用上一题的思路来做。本题目用到了全局变量,巧妙的地方在于该题中的递归函数不需要做什么本质上的改变,只需要多两个分别记录左右节点深度的变量,并加入全局变量的最大值比较即可。

    class Solution:
        def diameterOfBinaryTree(self, root: TreeNode) -> int:
            self.Max = 1    # 需要设置一个全局变量跟自己比较
            def maxDepth(r):
                if not r:
                    return 0
                else:
                    L = maxDepth(r.left)
                    R = maxDepth(r.right)
                    self.Max = max(L+R+1,self.Max)  
                    return max(L, R)+1
            maxDepth(root)
            return self.Max-1
  • 相关阅读:
    C++ Primer Plus章节编程练习(第十章)
    Bezier曲线
    C++静态持续变量
    计算机图形学之三维图形变换
    计算机图形学之二维图形变换
    C++ Primer Plus章节编程练习(第七章)
    C++中的指针与const
    Java 输入输出流
    Java Fx 画圆环
    注册事件及事件处理
  • 原文地址:https://www.cnblogs.com/nekoneko-15/p/13871394.html
Copyright © 2011-2022 走看看