1. 二叉数的层序遍历:
题目链接: 102. 二叉树的层序遍历 - 力扣(LeetCode)
应用条件:层序遍历
难点:
二叉树的层序遍历和递归遍历不一样,层序遍历实现的是一层一层全部遍历,层序遍历的难点就是要想到可以用队列来实现层序遍历的操作。将遍历到的代码放入队列中,并记录此层所有的节点个数为size,然后一个一个弹出,弹出的同时将这个节点的左右子节点都加入到队列中,弹出一个节点size减一,直到size为0,这时这一层的所有节点都已经弹出,然后我们重新获取size,此时的size就是下一层的所有节点个数。周而复始直到队列中没有节点了,就代表全部遍历完了
个人错误:
在将节点的左右子节点放入队列时忘记判断当前节点左右子节点是否存在。
思路:
如下
# 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]]:
res =[]
que = deque()
if not root:
return res
else:
que.append(root)
while que:
size = len(que)
curres = []
for i in range(size):
cur = que.popleft()
curres.append(cur.val)
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
res.append(curres)
return res
2. 二叉数的层序遍历二:
题目链接: 107. 二叉树的层序遍历 II - 力扣(LeetCode)
应用条件:层序遍历
难点:
和上一道题基本思路一致,只需要把返回结果reverse就行了
个人错误:
无。
思路:
如下
# 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 levelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]:
res =[]
que = deque()
if not root:
return res
else:
que.append(root)
while que:
size = len(que)
curres = []
for i in range(size):
cur = que.popleft()
curres.append(cur.val)
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
res.append(curres)
return res[::-1]
3. 二叉数的右视图:
题目链接:199. 二叉树的右视图 - 力扣(LeetCode)
应用条件:层序遍历
难点:
和上一道题基本思路一致,不用把每个节点都加入结果数组中,只需要判断当前节点是不是本层中最后一个节点,是最后一个节点将其加入到返回数组,不是则跳过。
个人错误:
无。
思路:
如下
# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:
res =[]
que = deque()
if not root:
return res
else:
que.append(root)
while que:
size = len(que)
curres = []
for i in range(size):
cur = que.popleft()
if i == size-1:
res.append(cur.val)
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
return res