返回
实践深度层次遍历刷题(下)
见解分享
2024-02-08 19:56:31
正文
在上一篇文章中,我介绍了层次遍历和深度遍历这两种树的基本遍历方法。现在,让我们通过刷题的形式来进一步巩固对这两种方法的理解和应用。
层次遍历刷题
- 给定一棵二叉树,求它的层序遍历结果
将树的每个节点从左到右放入队列,然后依次将队列中的节点出队并放入结果数组中。
[代码示例]
def level_order(root):
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level)
return result
- 给定一棵二叉树,求它的逆序层序遍历结果
将树的每个节点从右到左放入队列,然后依次将队列中的节点出队并放入结果数组中。
[代码示例]
def reverse_level_order(root):
if not root:
return []
queue = [root]
result = []
while queue:
level = []
for _ in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.right:
queue.append(node.right)
if node.left:
queue.append(node.left)
result.append(level)
result.reverse()
return result
- 给定一棵二叉树,求它的锯齿形层序遍历结果
将树的每个节点从左到右放入队列,然后依次将队列中的节点出队并放入结果数组中。
当队列中还有节点时,将队列中的节点从右到左放入队列。
重复上述两步,直到队列为空。
[代码示例]
def zigzag_level_order(root):
if not root:
return []
queue = [root]
result = []
left_to_right = True
while queue:
level = []
for _ in range(len(queue)):
if left_to_right:
node = queue.pop(0)
else:
node = queue.pop()
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level)
left_to_right = not left_to_right
return result
深度遍历刷题
- 给定一棵二叉树,求它的前序遍历结果
从根节点开始,先访问根节点,然后递归访问左子树,最后递归访问右子树。
[代码示例]
def preorder(root):
if not root:
return []
result = [root.val]
result.extend(preorder(root.left))
result.extend(preorder(root.right))
return result
- 给定一棵二叉树,求它的中序遍历结果
从根节点开始,先递归访问左子树,然后访问根节点,最后递归访问右子树。
[代码示例]
def inorder(root):
if not root:
return []
result = []
result.extend(inorder(root.left))
result.append(root.val)
result.extend(inorder(root.right))
return result
- 给定一棵二叉树,求它的后序遍历结果
从根节点开始,先递归访问左子树,然后递归访问右子树,最后访问根节点。
[代码示例]
def postorder(root):
if not root:
return []
result = []
result.extend(postorder(root.left))
result.extend(postorder(root.right))
result.append(root.val)
return result
更多学习资料
总结
层次遍历和深度遍历是树的基本遍历方法,在算法和数据结构中都有广泛的应用。通过刷题的形式,我们可以进一步巩固对这两种方法的理解和应用。希望本文能对大家有所帮助。