2022-03-14 leetcode 101\. 对称二叉树

101. 对称二叉树

难度简单

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

image.png

image.png

Python collections模块之deque()详解_chl183的博客-CSDN博客_collections.deque

递归法

我的递归方法

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """

        def isSymmetricFun(left, right):
            if not left and not right:
                return True            
            elif not(left and right):
                return False
            elif left.val != right.val:
                return False
            else:  # 易错点:发生递归调用是在前述条件都不成立(即左右节点都有值且相同,这时候需要递归去判断当前节点的下一层节点的关系)后,进入递归
                return isSymmetricFun(left.left, right.right) and isSymmetricFun(right.left, left.right)

        return isSymmetricFun(root.left, root.right)
        

题解区递归法

class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True
        def dfs(left,right):
            # 递归的终止条件是两个节点都为空
            # 或者两个节点中有一个为空
            # 或者两个节点的值不相等
            if not (left or right):
                return True
            if not (left and right):
                return False
            if left.val!=right.val:
                return False
            return dfs(left.left,right.right) and dfs(left.right,right.left)
        # 用递归函数,比较左节点,右节点
        return dfs(root.left,root.right)

作者:wang_ni_ma
链接:https://leetcode-cn.com/problems/symmetric-tree/solution/dong-hua-yan-shi-101-dui-cheng-er-cha-shu-by-user7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

迭代法

思路和算法

「方法一」中我们用递归的方法实现了对称性的判断,那么如何用迭代的方法实现呢?首先我们引入一个队列,这是把递归程序改写成迭代程序的常用方法。初始化时我们把根节点入队两次。每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。当队列为空时,或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/symmetric-tree/solution/dui-cheng-er-cha-shu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        queue1 = collections.deque([root, root])
        while queue1:
            a, b = queue1.popleft(), queue1.popleft()
            if not a and not b:
                continue
            elif not (a and b):
                return False
            elif a.val != b.val:
                return False            
            queue1.extend([a.left, b.right, a.right, b.left])               
        return True           
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容