102. 二叉树的层序遍历
第一想法:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
# 自己的错误想法:得出的结果是[3.9.20.15.7],无法对每层遍历到的结果加括号实现,考虑内部一个for循环的写法
que = deque()
res = []
if not root:
return []
que.append(root)
while que:
node = que.popleft()
res.append(node.val)
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return res
学习链接:更正后
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
# 法一:迭代法
que = deque()
res = []
if not root:
return []
que.append(root)
while que:
# 每层加入几个节点,就遍历几次
size = len(que)
temp = []
for _ in range(size):
node = que.popleft()
temp.append(node.val)
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
res.append(temp)
return res
# 法二:递归法
res = []
def recursion(cur, depth):
if not cur: return []
if len(res) == depth:
res.append([])
res[depth].append(cur.val)
if cur.left:
recursion(cur.left, depth+1)
if cur.right:
recursion(cur.right, depth + 1)
recursion(root, 0)
return res
226. 翻转二叉树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
# 递归法
def recursion(node):
if not node:
return
if not node.left and not node.right:
return
node.left, node.right = node.right,node.left
recursion(node.left)
recursion(node.right)
recursion(root)
return root
看过代码随想录后才知道原来用了前序遍历的想法,并且补充学习了层次遍历的解法
学习链接
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
que = deque([root])
if not root:
return
while que:
n = len(que)
for _ in range(n):
node = que.popleft()
node.left,node.right = node.right,node.left
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return root
101. 对称二叉树
之前学习的递归法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
def dfs(l,r):
if not r and l:
return False
elif not l and r:
return False
elif not l and not r:
return True
else:
return l.val == r.val and dfs(l.left,r.right) and dfs(l.right,r.left)
return dfs(root.left,root.right)