本次的题目解法很多,时间有限了解了视频中讲解的那种
102.二叉树的层序遍历
Python有个点可以注意一下
在使用for _ in range(len(queue))的时候,for循环中range的len只取一次,因此增加元素不会影响
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
from collections import deque
queue = deque()
res = []
if root:
queue.append(root)
while queue:
temp = []
size = len(queue)
for _ in range(size):
cur = queue.popleft()
temp.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
res.append(temp)
return res
226.翻转二叉树
前序遍历,递归法
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return root
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
101. 对称二叉树
本题要比较的不是左右结点相等,而是左子树和右子树是否相等
后序遍历,递归法
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
return self.compare(root.left, root.right)
def compare(self, left, right):
if left and not right:
return False
if not left and right:
return False
if not left and not right:
return True
if left.val != right.val:
return False
return self.compare(left.left, right.right) and self.compare(left.right, right.left)