leetcode-master icon indicating copy to clipboard operation
leetcode-master copied to clipboard

101. 对称二叉树

Open wangzhenzhou2020 opened this issue 3 years ago • 0 comments

其实正常的用队列解法也可以,将一层的节点(包括空节点)收集好后,比如在layer: List中。 再判断 list 是不是对称的。依次遍历每一层。 直观上来说,卡哥 的队列解法,是一个节点找一个节点的镜像。而上述的解法是收集好一层的节点(包括空节点)后,判断该层的节点是不是对称的。上述解法的入队逻辑和原先的二叉树层序遍历的逻辑基本一致。

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        
        from collections import deque
        dq = deque()
        res = []
        if root: dq.append(root)

        while(dq):
            layer = []
            for i in range(len(dq)):
                out = dq.popleft()
                if out:
                    layer.append(out.val)
                    dq.append(out.left)
                    dq.append(out.right)                 
                else:  # 空节点也入队
                    layer.append(out)
            _len = len(layer)
            for i in range(_len//2): # 判断该层节点是否对称
                if layer[i] != layer[_len-1-i]: return False 
        return True

wangzhenzhou2020 avatar Apr 05 '22 13:04 wangzhenzhou2020