刷力扣热题–第十二天:226. 翻转二叉树+101.对称二叉树
菜鸟第十二天开始奋战敲代码,持之以恒,见证成长
1.题目简介
(1) 翻转二叉树
(2)对称二叉树
2.题目解答
(1) 翻转二叉树
这道题比较好想,左子树=右子树,递归去做,输出答案
OK,没问题,再来一道
(2)对称二叉树
这道题用了上面的思路,将右子树旋转,看是否等于左子树,并返回相应结果值.
OK,过了,但这里有个问题,比较的时候应该比较的是值,而不是整个子树,因为两颗子树在内存的存储位置不同.另外这个问题之后遇到更好的算法会进行优化的.
转念一想还是给优化了,直接递归比较左子树与有子树,over.
3.心得体会
(1) 翻转二叉树
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
def inverse(root):
if root:
temp = root.left
root.left = root.right
root.right = temp
inverse(root.left)
inverse(root.right)
return root
root = inverse(root)
return root
(2)对称二叉树
翻转+比较
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def reverse(root):
if root is None:
return
temp = root.left
root.left = root.right
root.right = temp
reverse(root.left)
reverse(root.right)
return root
right_root = reverse(root.right)
left_root = root.left
def same_val(p,q):
if p is None and q is None:
return True
elif p is None or q is None:
return False
elif p.val != q.val:
return False
else:
return same_val(p.left,q.left) and same_val(p.right,q.right)
return same_val(right_root,left_root)
直接比较
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def same_val(p,q):
if p is None and q is None:
return True
elif p is None or q is None:
return False
elif p.val != q.val:
return False
else:
return same_val(p.left,q.right) and same_val(p.right,q.left)
return same_val(root.left,root.right)
4.做题时长
7月16日14:15-16:15