07.19更新
# 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:
if root == None or (root.left == None and root.right == None):
return True
if (root.left != None and root.right == None) or (root.left == None and root.right != None):
return False
return True if self.isSymTree(root.left,root.right) else False
def isSymTree(self,a,b):
if a == None and b == None:
return True
if (a == None and b != None) or (a != None and b == None):
return False
return True if a.val == b.val and self.isSymTree(a.left,b.right) and self.isSymTree(a.right,b.left) else False
思路:常规的先序遍历,其顺序为 根-左-右
我们仿照其顺序,定义一种先序遍历-β方法,其顺序为根-右-左
假设一个树为对称二叉树,那么常规先序遍历方法和先序遍历-β方法的遍历结果应该是相同的
本体采用这种思路,将一棵树的上述两种遍历结果进行对比,若相同,则为对称二叉树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.leftlist = []
self.rightlist = []
def isSymmetric(self, root: TreeNode) -> bool:
if root is None:
return True
elif root.left is None and root.right is None:
return True
elif root.left is None or root.right is None:
return False
self.root_left_right(root)
self.root_right_left(root)
return True if self.leftlist == self.rightlist else False
def root_left_right(self,node):#常规先序遍历
if node is None:
self.leftlist.append('x')
else:
self.leftlist.append(node.val)
self.root_left_right(node.left)
self.root_left_right(node.right)
def root_right_left(self,node):#先序-beta
if node is None:
self.rightlist.append('x')
else:
self.rightlist.append(node.val)
self.root_right_left(node.right)
self.root_right_left(node.left)