给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
如何去判断二叉树是镜像对称?如下:
按照题目中【进阶】部分所述,本篇幅就从递归和迭代两种思路来解决该问题。
根据上面判断二叉树是否对称的思路,先设定递归终止的条件:
递归具体的过程:
具体代码实现见【代码实现:递归】。
还是按照开篇的思路判断二叉树的对称,这次使用迭代的方法实现。这里需要引入一个队列。
具体的做法:
具体实现的代码见【代码实现:迭代】
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
return self.check(root, root)
def check(self, t1, t2):
if t1 == None and t2 == None:
return True
if t1 == None or t2 == None:
return False
return t1.val == t2.val and self.check(t1.left, t2.right) and self.check(t1.right, t2.left)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
# 构建,初始化队列
# 将根节点入队两次
queue = []
queue.append(root)
queue.append(root)
# 循环开始
while len(queue) != 0:
# 先连续出队,提取两个节点进行比较
t1 = queue.pop()
t2 = queue.pop()
if t1 == None and t2 == None:
continue
# 当两个节点不相等,直接返回 False
if t1 == None or t2 == None or t1.val != t2.val:
return False
# 重新入队,将两个节点的左右子节点按照相反的顺序入队
queue.append(t1.left)
queue.append(t2.right)
queue.append(t1.right)
queue.append(t2.left)
return True


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2873/viewspace-2825568/ ,如需转载,请注明出处,否则将追究法律责任。