leecode #对称二叉树#二叉树的最大深度

题目描述:

给你一个二叉树的根节点 root , 检查它是否轴对称。

分析:

如果一个树的左子树与右子树镜像对称,那么这个树是对称的。故问题转化成两个树在什么情况下互为镜像。

满足一下条件互为镜像:

  • 它们的两个根结点具有相同的值
  • 每个树的右子树都与另一个树的左子树镜像对称

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        def search(left, right):
            if left is None and right is None:
                return True
            elif left is None or right is None:
                return False
            else:   
                return left.val == right.val and search(left.left, right.right) and search(left.right, right.left)


        return search(root, root)

亮点:嵌套函数,自定义了一个search函数,传入左右节点,从而实现镜像判断。

题目描述:

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

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

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

分析:

法一:深度优先搜素

若已知左子树和右子树的最大深度 l 和 r ,则二叉树最大深度为max(l,r)+1

而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。

代码:

class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        else:
            left_hight = self.maxDepth(root.left)
            right_hight = self.maxDepth(root.right)
            return max(left_hight,right_hight)+1

return 0 无实际意义,表示程序正常运行退出

还是需要大量的案例和项目,才能加深对代码的理解,提高运用能力

你可能感兴趣的:(leetcode,算法,职场和发展)