101. Symmetric Tree

本题判断一个二叉树是否为对称树

题目链接:

101. Symmetric Tree

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
'''递归'''
class Solution(object):
	def sym(self, left, right):
		if not left and not right:
			return True
		if left and right and left.val == right.val:
			return self.sym(left.left, right.right) and self.sym(left.right, right.left)
		return False
	def isSymmetric(self, root):
		"""
		:type root: TreeNode
		:rtype: bool
		"""
		if not root:
			return True
		return self.sym(root.left,root.right)
	
'''非递归'''
class Solution(object):
	def isSymmetric(self, root):
		if not root:
			return True
		if not root.left and not root.right: #左右子树均为空
			return True
		if not root.left or not root.right: #左右子树一个为空一个不为空
			return False
		stackl = []
		stackr = []
		stackl.append(root.left)
		stackr.append(root.right)
		while stackl and stackr:
			sl = stackl.pop()
			sr = stackr.pop()
			if sl.val != sr.val:
				return False
			if (not sl.left and sr.right) or (sl.left and not sr.right): #左子树的左子节点为空右子树的右子节点不为空,
				return False
			if (not sl.right and sr.left) or (sl.right and not sr.left): #左子树的右子节点为空且右子树的左子节点不为空,
				return False
			if sl.left and sr.right: #左子树的左子节点和右子树的右子节点比较
				stackl.append(sl.left)
				stackr.append(sr.right)
			if sl.right and sr.left: #左子树的子节点和右子树的右子节点比较
				stackl.append(sl.right)
				stackr.append(sr.left)
		return True


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值