LeetCode 102. Binary Tree Level Order Traversal 题解
LeetCode 102. Binary Tree Level Order Traversal 题解题目描述给你二叉树的根节点root返回其节点值的层序遍历。 即逐层地从左到右访问所有节点。示例 1输入root [3,9,20,null,null,15,7] 输出[[3],[9,20],[15,7]]示例 2输入root [1] 输出[[1]]示例 3输入root [] 输出[]解题思路方法一广度优先搜索BFS思路使用队列来实现广度优先搜索每次处理一层的节点将当前层的节点值存入结果列表然后将下一层的节点左子节点和右子节点加入队列重复上述过程直到队列为空复杂度分析时间复杂度O(n)其中 n 是二叉树中的节点个数。每个节点只被访问一次。空间复杂度O(n)最坏情况下队列的大小为 O(n)。方法二深度优先搜索DFS思路使用递归进行深度优先搜索记录当前节点的深度将节点值添加到对应深度的结果列表中递归遍历左子树和右子树复杂度分析时间复杂度O(n)其中 n 是二叉树中的节点个数。每个节点只被访问一次。空间复杂度O(h)其中 h 是二叉树的高度。递归调用的栈空间取决于二叉树的高度最坏情况下为 O(n)。代码实现方法一广度优先搜索# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution: def levelOrder(self, root: Optional[TreeNode]) - List[List[int]]: if not root: return [] result [] queue deque([root]) while queue: level_size len(queue) level [] for _ in range(level_size): node queue.popleft() level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) result.append(level) return result方法二深度优先搜索# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution: def levelOrder(self, root: Optional[TreeNode]) - List[List[int]]: result [] self.dfs(root, 0, result) return result def dfs(self, node, depth, result): if not node: return # 如果当前深度还没有对应的列表创建一个 if depth len(result): result.append([]) # 将当前节点值添加到对应深度的列表中 result[depth].append(node.val) # 递归遍历左右子树 self.dfs(node.left, depth 1, result) self.dfs(node.right, depth 1, result)测试用例测试用例 1输入[3,9,20,null,null,15,7]输出[[3],[9,20],[15,7]]测试用例 2输入[1]输出[[1]]测试用例 3输入[]输出[]测试用例 4输入[1,2,3,4,5,6,7]输出[[1],[2,3],[4,5,6,7]]总结本题是二叉树遍历的经典问题主要考察对广度优先搜索和深度优先搜索的理解和应用。两种方法各有优缺点广度优先搜索层次清晰直接按照层次顺序处理节点代码逻辑直观。深度优先搜索通过递归实现代码简洁但需要额外记录深度信息。在实际应用中广度优先搜索通常是解决层序遍历问题的首选方法因为它天然适合按照层次顺序处理节点。而深度优先搜索则在其他类型的树遍历问题中更为常用。无论是哪种方法掌握二叉树的遍历技巧对于解决树相关的算法问题都非常重要。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2464825.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!