先用递归写翻转二叉树和对称二叉树吧,层序遍历尽量写。
226.翻转二叉树
翻转一棵二叉树。
思路和翻转列表一些类似,在此基础上加了递归思想,很好入手。
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return None
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
轴对称的本质就是一棵树通过翻转操作后等于另一棵树,现翻转然后再通过递归判断树是否相等即可,代码如下:
def isSameTree(p, q):#判断两棵树是否相同,核心在最后一个判断条件
if not p and not q:
return True
if not p or not q:
return False
return p.val == q.val and isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
def invertTree(root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
root.left,root.right = invertTree(root.right),invertTree(root.left)
return root
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
#先翻转一条子树,再判定左右子树是否相等
root.right = invertTree(root.right)
return isSameTree(root.left, root.right)
层序遍历十题待补充。