递归与二叉树_leetcode101

此博客内容为转载,原文链接为https://www.cnblogs.com/lux-ace/p/10546763.html ,标签涉及数据结构与算法。
#coding=utf-8
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None


# 递归
class Solution1(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""


return self.isSame(root,root)

# coding=utf-8
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None

# 递归
class Solution1(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""

return self.isSame(root, root)

def isSame(self, left, right):

if not left and not right:
return True
if not left and right:
return False
if left and not right:
return False
if left.val == right.val:
return self.isSame(left.left, right.right) and self.isSame(left.right, right.left)
else:
return False

# 迭代
class Solution2(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
else:
return self.isMirror(root.left, root.right)

def isMirror(self, left, right):
queue = []
queue.append(left)
queue.append(right)

# 每次成对的比较
while queue:

curLeft = queue.pop(0)
curRight = queue.pop(0)

if not curLeft and not curRight:
continue
if not curLeft or not curRight or curLeft.val != curRight.val:
return False

queue.append(curLeft.left)
queue.append(curRight.right)
queue.append(curLeft.right)
queue.append(curRight.left)

return True

def createTree(self):

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(2)

root.left.left = TreeNode(3)
root.left.right = TreeNode(4)
root.right.left = TreeNode(4)
root.right.right = TreeNode(3)

return root

def printTree(self, root):
res = []

if not root:
return res

queue = []
queue.append(root)

while queue:
level = []
for i in range(len(queue)):
curNode = queue.pop(0)
level.append(curNode.val)

if curNode.left:
queue.append(curNode.left)
if curNode.right:
queue.append(curNode.right)

res.append(level)

return res

s = Solution2()

root = s.createTree()

# print s.printTree(root)

print s.isSymmetric(root)
def isSame(self,left,right):

if not left and not right:
return True
if not left and right:
return False
if left and not right:
return False
if left.val == right.val:
return self.isSame(left.left,right.right) and self.isSame(left.right,right.left)
else:
return False



# 迭代
class Solution2(object):
def isSymmetric(self, root):
"""
:type root: TreeNode :rtype: bool """ if not root: return True else: return self.isMirror(root.left,root.right) def isMirror(self,left,right): queue = [] queue.append(left) queue.append(right) # 每次成对的比较 while queue: curLeft = queue.pop(0) curRight = queue.pop(0) if not curLeft and not curRight: continue if not curLeft or not curRight or curLeft.val != curRight.val: return False queue.append(curLeft.left) queue.append(curRight.right) queue.append(curLeft.right) queue.append(curRight.left) return True def createTree(self): root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(2) root.left.left= TreeNode(3) root.left.right = TreeNode(4) root.right.left = TreeNode(4) root.right.right = TreeNode(3) return root def printTree(self,root): res = [] if not root: return res queue = [] queue.append(root) while queue: level = [] for i in range(len(queue)): curNode = queue.pop(0) level.append(curNode.val) if curNode.left: queue.append(curNode.left) if curNode.right: queue.append(curNode.right) res.append(level) return ress = Solution2()root = s.createTree()# print s.printTree(root)print s.isSymmetric(root)

转载于:https://www.cnblogs.com/lux-ace/p/10546763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值