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

判断二叉树函数f()属于前序遍历还是后序遍历?

二叉树遍历判断:前序还是后序?

遍历规则理解

  • 前序遍历:先访问根节点,再遍历左子树,最后遍历右子树
  • 后序遍历:先遍历左子树,再遍历右子树,最后访问根节点

考题函数分析

期末考题要求判断以下C++函数f()采用的是前序遍历还是后序遍历:

template <typename T>
int f(treeNode* t)
{
   int n=0, leftValue, rightValue;
   if (t != NULL) {
      if (t->leftChild != NULL || t->rightChild != NULL)
         n++;
      leftValue = f(t->leftChild);
      rightValue = f(t->rightChild);
      return n + leftValue + rightValue;
   } else
      return 0;
}

这个函数的执行逻辑是:先对当前节点做了一次子节点存在性判断(有子节点则n加1),随后递归遍历左子树,再递归遍历右子树,最后才将当前节点的n值与左右子树的返回值合并后返回。

判断遍历类型的核心是当前节点核心处理动作的执行时机。这里函数的核心计算逻辑(将当前节点贡献与子树结果合并)是在左右子树都遍历完成后才执行的,完全符合后序遍历的特征。

对比节点删除函数clear

这个逻辑和二叉树节点删除函数clear的遍历逻辑完全一致:

clear(Node* curr) {
   if (!curr)
      return;

   clear(curr->left);
   clear(curr->right);
   delete curr;
}

clear函数先递归处理左子树,再处理右子树,最后才执行当前节点的核心操作(删除节点),是典型的后序遍历实现。

结论:函数f()采用的是后序遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:50:27