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

嵌套路径递归决策树遍历与决策聚合至DecisionResult的实现咨询

遍历决策路径树并聚合所有决策到映射中

核心思路

通过递归遍历整个决策树,识别每个decision节点,将其decisionId及对应节点信息存入DecisionResult的映射中。遍历逻辑严格遵循树的结构模式:decision→reason→decision→outcome→terminal,遇到不同类型节点时,递归处理其子节点。

类型定义(先明确结构)

// 节点基础类型
type BaseNode = {
  type: 'decision' | 'reason' | 'outcome' | 'terminal';
};

// 决策节点
type DecisionNode = BaseNode & {
  type: 'decision';
  decisionId: string;
  reasons: ReasonNode[];
};

// 理由节点
type ReasonNode = BaseNode & {
  type: 'reason';
  next: DecisionNode | OutcomeNode;
};

// 结果节点
type OutcomeNode = BaseNode & {
  type: 'outcome';
  terminal: TerminalNode;
};

// 终端节点
type TerminalNode = BaseNode & {
  type: 'terminal';
  status: 'success' | 'failure';
};

// 聚合结果类型
type DecisionResult = {
  decisions: Record<string, DecisionNode>;
};

示例决策树JSON数据

{
  "type": "decision",
  "decisionId": "D001",
  "reasons": [
    {
      "type": "reason",
      "next": {
        "type": "decision",
        "decisionId": "D002",
        "reasons": [
          {
            "type": "reason",
            "next": {
              "type": "outcome",
              "terminal": {
                "type": "terminal",
                "status": "success"
              }
            }
          }
        ]
      }
    },
    {
      "type": "reason",
      "next": {
        "type": "outcome",
        "terminal": {
          "type": "terminal",
          "status": "failure"
        }
      }
    }
  ]
}

遍历与聚合实现函数

function aggregateDecisions(node: BaseNode, result: DecisionResult): void {
  switch (node.type) {
    case 'decision':
      // 将决策节点存入映射
      result.decisions[node.decisionId] = node;
      // 遍历所有子reason节点
      node.reasons.forEach(reason => aggregateDecisions(reason, result));
      break;
    case 'reason':
      // 递归处理reason指向的下一个节点
      aggregateDecisions(node.next, result);
      break;
    case 'outcome':
      // 递归处理终端节点(无决策,仅终止路径)
      aggregateDecisions(node.terminal, result);
      break;
    case 'terminal':
      // 终端节点为路径终点,直接返回
      return;
  }
}

// 初始化结果并执行遍历
function getDecisionResult(root: BaseNode): DecisionResult {
  const result: DecisionResult = { decisions: {} };
  aggregateDecisions(root, result);
  return result;
}

使用示例

// 假设root是示例JSON解析后的节点
const root: DecisionNode = /* 示例JSON数据 */;
const decisionResult = getDecisionResult(root);

// 输出结果:{ decisions: { D001: [D001节点], D002: [D002节点] } }
console.log(decisionResult);

关键说明

  • 递归函数会遍历树的每一条路径,不会遗漏任何decision节点
  • 映射以decisionId为键,直接存储整个决策节点,方便后续快速查找
  • 遍历逻辑完全匹配指定的结构模式,可适配任意深度的决策树

内容的提问来源于stack exchange,提问作者BreenDeen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:24:30