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

如何编写该树的正确递归postorder(后序遍历)代码?附preorder参考

递归后序遍历代码正确性核验

你的现有后序遍历代码不符合正确的递归模式,主要存在两处核心错误:

  • 访问节点时机错误:后序遍历要求先完成所有子节点的遍历,最后再访问当前根节点,你现有代码把visit(t)放在判断生效后的第一行,和前序逻辑一致,访问顺序完全不符合后序要求。
  • 子节点处理逻辑缺失:你调用t.descend()进入子节点层级后直接调用t.ascend()返回,没有在子节点层级完成所有子树的递归遍历,所有子节点都没有被正确处理。

你可以参考和前序代码逻辑对齐的正确后序实现,仅需要将visit(t)的调用时机从处理子树前调整到处理完所有子树后即可:

void postorderR (Tree &t) {
   if (t.on()) {
      // 进入子节点层级,遍历所有子树
      t.descend();
      indent = indent + 3;
      while (t.on()) {
         postorderR(t);
         t.move();
      }
      t.ascend();
      indent = indent - 3;
      // 所有子树处理完成后,访问当前节点
      visit(t);
   }
}

该实现完全符合后序遍历的递归模式,运行后即可输出你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:04