美文网首页
tag8:树 二叉树的深度以及对称二叉树

tag8:树 二叉树的深度以及对称二叉树

作者: 是黄小胖呀 | 来源:发表于2021-01-04 23:50 被阅读0次

    1、leetcode:104. 二叉树的最大深度

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

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

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

    示例:

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

        3

      / \

      9  20

        /  \

      15  7

    返回它的最大深度 3 。

    1、递归

    classSolution: defmaxDepth(self, root: TreeNode)-> int:

            if not root:

                return 0        

            left=self.maxDepth(root.left)

            right=self.maxDepth(root.right)

            return max(left,right)+1

    2、迭代

    class Solution:

        def maxDepth(self, root: TreeNode) -> int:

            if not root:

                return 0

            tmp=[root]

            level=0

            while tmp:

                 l=[]

                 k=len(tmp)

                 for i in range(k):

                      a=tmp.pop(0)

                      if a.left:

                          l.append(a.left)

                      if a.right:

                          l.append(a.right)

                 tmp=l

                 level=level+1

            return level

    2、对称二叉树

    leetcode101. 对称二叉树

    给定一个二叉树,检查它是否是镜像对称的。

    例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

        1

      / \

      2  2

    / \ / \

    3  4 4  3

    但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

        1

      / \

      2  2

      \  \

      3    3

    进阶:

    你可以运用递归和迭代两种方法解决这个问题吗?

    1、递归

    比较两个节点:

    class Solution:

        def isSymmetric(self, root: TreeNode) -> bool:

            if root is None: 

                return True

            def bfs(left,right):

                if not left and not right:

                    return True

                if not left or not right:

                    return False

                if left.val!=right.val:

                    return False

                return bfs(left.right,right.left) and bfs(left.left,right.right)

            return  bfs(root.left,root.right)

    2、迭代

    关键也是比较两个节点:

    class Solution:

        def isSymmetric(self, root: TreeNode) -> bool:

            if root is None: 

                return True

            tmp=[(root.left,root.right)]

            while tmp:

                left,right=tmp.pop(0)

                if not left and not right:

                    continue

                if not left or not right:

                    return False

                if left.val!=right.val:

                    return False          

                tmp.append((left.left,right.right))

                tmp.append((left.right,right.left))

            return True

    -20200104

    相关文章

      网友评论

          本文标题:tag8:树 二叉树的深度以及对称二叉树

          本文链接:https://www.haomeiwen.com/subject/seranktx.html