基于主顺序的树前序遍历Python实现问题调试
自定义主顺序的树前序遍历实现问题
我已实现树节点的相关方法,self代表树结构实例,master_order是一个节点列表,用于指定前序遍历时子节点的扫描顺序。
遍历示例
基于主顺序[6, 4, 3, 1, 2, 5]的前序遍历流程:
- 从根节点1开始
- 按主顺序筛选并排序节点1的子节点,得到
[4,3,2] - 访问节点4(无子女,继续)
- 访问节点3(无子女,继续)
- 访问节点2
- 按主顺序筛选并排序节点2的子节点,得到
[6,5] - 访问节点6(无子女,继续)
- 访问节点5(无子女,继续)
- 完成遍历
现有方法说明
节点已实现以下方法:
get_children(self):返回当前节点的直接子节点列表get_parent(self):返回当前节点的父节点
需要修正的代码
当前pre_order函数无法正常工作,需要调整使其正确返回基于指定主顺序的前序遍历结果。要求时间复杂度为O(N)(进阶要求)或O(N²)(基础要求):
from typing import List class Node: def get_children(self) -> List["Node"]: """ 返回当前节点的直接子节点 :return: 当前节点的子节点列表 """ pass def get_parent(self) -> "Node": """ 返回当前节点的父节点 :return: 当前节点的父节点 """ pass def pre_order(self, master_order: List[Node]) -> List[Node]: """ 根据指定的主顺序返回树的前序遍历结果 进阶要求O(N)时间复杂度,基础要求O(N²)时间复杂度 :param master_order: 用于指定遍历顺序的主节点列表 :return: 符合主顺序的树前序遍历结果 """ result = [] master_idx = 0 def traverse(node: Node, master_idx: int): if not node: return else: while master_idx < len(master_order) and node.id != master_order[master_idx]: master_idx += 1 result.append(node) for child in node.children: traverse(child, master_idx + 1) traverse(self.root, 0) return result
内容的提问来源于stack exchange,提问作者Ben Jerrings
相关产品推荐
相关产品推荐

