问题来源:对称二叉树
问题描述:给定一个二叉树,检查它是否是镜像对称的。
比如,下面这个二叉树是镜像对称的;
1
/
2 2
/ \ /
3 4 4 3
而这个二叉树则不是镜像对称的。
1
/
2 2
\
3 3
例子:
输入:[1,2,2,3,4,4,3]
输出:True
思路:镜像对称意味着左子树与右子树镜像对称,在遍历左子树或者右子树过程中,我们比较镜像节点即可
1. 深度遍历
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
# 如果该二叉树为空树,则返回True
if root == None: return True
# 如果该二叉树非空,判断是否镜像
def isMirror(root1, root2):
if (root1 == None) and (root2 == None):
return True
if (root1 == None) or (root2 == None):
return False
return (root1.val == root2.val) and isMirror(root1.left, root2.right) and isMirror(root1.right, root2.left)
return isMirror(root.left, root.right)
2. 广度遍历
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
# 二叉树为空
if root == None: return True
# 二叉树非空
def isMirror(root1, root2):
queue = []
queue.append(root1)
queue.append(root2)
while queue:
temp1 = queue.pop(0)
temp2 = queue.pop(0)
if (temp1 == None) and (temp2 == None):
continue
if (temp1 == None) or (temp2 == None):
return False
if temp1.val != temp2.val:
return False
queue.append(temp1.left)
queue.append(temp2.right)
queue.append(temp1.right)
queue.append(temp2.left)
return True
return isMirror(root.left, root.right)