题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
# 解题思路(迭代)
使用迭代的方法,先装上根节点,根节点单独讨论,因为他只有左子和右子,然后下次弹出的队列就是偶数了,分别装载(左左,右右)和(左右,右左),如果只有一个非空,返回False,两个都为空跳过,弹出连续两个节点对,如果数值不相等,则返回False,队列如果为空了还没有返回False,就返回True。
import collections class Solution: def isSymmetrical(self , pRoot: TreeNode) -> bool: # write code here if not pRoot: return True deque = collections.deque() deque.append(pRoot) while deque: if len(deque) == 1: root = deque.popleft() if root.left and root.right: deque.append(root.left) deque.append(root.right) elif root.left or root.right: return False else: nodeLeft = deque.popleft() nodeRight = deque.popleft() if nodeLeft.val != nodeRight.val: return False if nodeLeft.left and nodeRight.right: deque.append(nodeLeft.left) deque.append(nodeRight.right) elif nodeLeft.left or nodeRight.right: return False if nodeLeft.right and nodeRight.left: deque.append(nodeLeft.right) deque.append(nodeRight.left) elif nodeLeft.right or nodeRight.left: return False return True