层序遍历
LeetCode.102 二叉树的层序遍历
if not root: return []
que = collections.deque([root])
res = []
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(result)
return res
LeetCode.107 二叉树的层序遍历II
if not root: return []
que = collections.deque([root])
res = []
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(result)
return res[::-1]
LeetCode.199 二叉树的右视图
if not root: return []
res = []
que = collections.deque([root])
while que:
for _ in range(len(que)):
node = que.popleft()
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(node.val)
return res
LeetCode.637 二叉树的层平均值
if not root: return []
que = collections.deque([root])
res = []
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(sum(result)/len(result))
return res
LeetCode.429 N叉数的层序遍历
if not root: return []
que = collections.deque([root])
res = []
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node.val)
for i in node.children:
que.append(i)
res.append(result)
return res
LeetCode.515 在每个树行中寻找最大值
if not root: return []
que = collections.deque([root])
res = []
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(max(result))
return res
LeetCode.116 填充每个节点的下一个右侧节点指针
if not root: return root
que = collections.deque([root])
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
for i in range(len(result)-1):
result[i].next = result[i+1]
return root
LeetCode.117 填充每个节点的下一个右侧节点指针II
if not root: return root
que = collections.deque([root])
while que:
result = []
for _ in range(len(que)):
node = que.popleft()
result.append(node)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
for i in range(len(result)-1):
result[i].next = result[i+1]
return root
LeetCode.104 二叉树的最大深度
if not root: return 0
que = collections.deque([root])
res = 0
while que:
for _ in range(len(que)):
node = que.popleft()
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res += 1
return res
LeetCode.111 二叉树的最小深度
if not root: return 0
que = collections.deque([root])
res = 1
while que:
for _ in range(len(que)):
node = que.popleft()
if not node.left and not node.right: return res
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res += 1
LeetCode.226 翻转二叉树
递归法
if not root: return
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
迭代法
if not root: return root
que = collections.deque([root])
while que:
for _ in range(len(que)):
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
LeetCode.101 对称二叉树
def issame(left, right):
if not left and right: return False
if left and not right: return False
if not left and not right: return True
if left.val != right.val: return False
return issame(left.left, right.right) and issame(left.right, right.left)
return issame(root.left, root.right)