软考
APP下载

leetcode二叉树的层次遍历

二叉树的层次遍历是二叉树遍历中最基本的一种形式,也是LeetCode中二叉树题目的经典模板之一。在这篇文章中,我们将从多个角度分析LeetCode二叉树的层次遍历,包括二叉树的定义、层次遍历的应用以及题目解法。

一、二叉树的定义

在学习二叉树的层次遍历之前,我们需要首先明确什么是二叉树。二叉树是一种树型结构,其中每个节点最多有两个子节点,分别被称为左子节点和右子节点。这里的子节点可以为空。

以下是一个简单的二叉树示例:

1

/ \

2 3

/ \

4 5

二、层次遍历的应用

层次遍历是一种广度优先搜索算法,它从二叉树的根节点开始遍历,按照层数依次访问每个节点。在实际应用中,层次遍历可以用于广告推荐、社交网络分析和文本分类等领域。

在二叉树问题中,层次遍历是很常见的一种操作。通过层次遍历可以获得有关二叉树结构的相关信息,例如二叉树的深度、宽度和节点个数等。在LeetCode中,也有很多二叉树的层次遍历相关题目,包括102. Binary Tree Level Order Traversal和107. Binary Tree Level Order Traversal II等。

三、题目解法

对于LeetCode中的二叉树层次遍历相关的题目,解法可以分为两种:迭代算法和递归算法。

1. 迭代算法

迭代算法是一种基于循环的算法,通过使用队列来模拟层次遍历过程。具体操作如下:

1)首先将二叉树根节点入队;

2)之后不停地弹出队首元素,访问该节点,然后将当前节点的左右子节点依次入队;

3)如果队列中还有元素,则重复步骤2。

以下是示例代码:

```

class Solution:

def levelOrder(self, root: TreeNode) -> List[List[int]]:

if not root:

return []

res = []

queue = []

queue.append(root)

while queue:

size = len(queue)

cur_level = []

for _ in range(size):

node = queue.pop(0)

cur_level.append(node.val)

if node.left:

queue.append(node.left)

if node.right:

queue.append(node.right)

res.append(cur_level)

return res

```

2. 递归算法

递归算法是一种基于函数调用的算法,通过调用函数本身来实现遍历操作。在二叉树层次遍历中,递归算法需要使用一个参数来记录当前节点所在的层数。具体操作如下:

1)使用一个列表res记录层数,然后调用递归函数,并将节点和层数作为参数传入;

2)如果res的长度等于当前层数,则创建一个新列表并将该节点值加入其中;否则,将该节点值加入res对应层数对应的列表。

以下是示例代码:

```

class Solution:

def levelOrder(self, root: TreeNode) -> List[List[int]]:

def dfs(node, level, res):

if not node:

return

if len(res) == level:

res.append([])

res[level].append(node.val)

dfs(node.left, level+1, res)

dfs(node.right, level+1, res)

res = []

dfs(root, 0, res)

return res

```

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库