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

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:树 二叉树的深度以及对称二叉树)