【算法训练】剑指offer#28 对称的二叉树
一、描述
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
二、思路
- 构造镜像树,然后对比
- 别闹了。。。不显示,应该就在这棵树本身上对比,不构造镜像
三、解题
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def __init__(self):
self.re = True
def isSymmetric(self, root: TreeNode) -> TreeNode:
if root:
if root.right and root.left:
if root.left.val != root.right.val:
return False
else:
self.judge(root.left,root.right)
else:
if not(not root.left and not root.right):
# 只有一个存在
return False
else:
return True
return self.re
def judge(self, left_node, right_node):
# 先判断四个字节点是否存在
if left_node.right and right_node.left and left_node.left and right_node.right:
if left_node.left.val == right_node.right.val and left_node.right.val == right_node.left.val:
self.judge(left_node.left,right_node.right)
self.judge(left_node.right,right_node.left)
else:
self.re = False
return
else:
# 存在节点缺失
if left_node.left and right_node.right:
if left_node.left.val == right_node.right.val:
self.judge(left_node.left,right_node.right)
else:
self.re = False
return
else:
if not(not left_node.left and not right_node.right):
self.re = False
return
if left_node.right and right_node.left:
if left_node.right.val == right_node.left.val:
self.judge(left_node.right,right_node.left)
else:
self.re = False
return
else:
if not(not left_node.right and not right_node.left):
self.re = False
return