# leetcode101. 对称二叉树

101.题目描述：对称二叉树

1.递归实现

递归结束的条件：（1） 左右对应的节点一直相等，直到叶子结点最后的子节点都是None

（2） 对应的左节点和右节点不相等，返回False

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#方法1：
class Solution:
#判断是否是对称二叉树
def isSymmetric(self, root: TreeNode) -> bool:
return isEqual(root.left,root.right)
#递归判断左边节点的左节点和右面节点的右节点是否相等
def isEqual(self,left,right):
if left is None and right is None:
return True
elif left is None or right is None:
return False
else :
return (left.val==right.val) and (is_or_not(left.left,right.right)) and (is_or_not(left.right,right.left))

2.队列实现

class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root or not (root.left or root.right):
return True
# 用队列保存节点
queue = [root.left,root.right]
while queue:
# 从队列中取出两个节点，再比较这两个节点
left = queue.pop(0)
right = queue.pop(0)
# 如果两个节点都为空就继续循环，两者有一个为空就返回false
if not (left or right):
continue
if not (left and right):
return False
if left.val!=right.val:
return False
# 将左节点的左孩子， 右节点的右孩子放入队列
queue.append(left.left)
queue.append(right.right)
# 将左节点的右孩子，右节点的左孩子放入队列
queue.append(left.right)
queue.append(right.left)
return True


©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客