You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于主顺序的树前序遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:02:43