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

二叉树postorder后序遍历输出随机值或无输出问题咨询

问题核心原因

你的代码出现异常输出的根本原因是指针赋值顺序错误,导致二叉树节点关联了野指针:

  • 你在执行root->left = num2时,num2还未通过new申请内存,属于未初始化的野指针,指向的内存地址完全随机。
  • 后续你才为num2分配内存、赋值成员变量,但这一步不会更新已经赋值给root->left的旧值,因此root的左孩子指针始终指向无效内存。
  • 后序遍历时访问root->left指向的非法内存,就会出现输出随机值、无输出甚至程序崩溃的未定义行为。
修复方案

调整main函数中节点初始化和关联的顺序,先完成num2的初始化,再把它赋值给root->left即可,修正后代码如下:

int main(){
   // 建议声明指针时就初始化为nullptr,避免野指针问题
   node *root = nullptr, *num2 = nullptr;

   bt tree;

   // 先初始化num2节点
   num2 = new node;
   num2->data = 10;
   num2->right = NULL;
   num2->left =NULL;

   // 再初始化root节点,关联已经准备好的num2
   root = new node;
   root->data = 12;
   root->left = num2;
   root->right = NULL;

   tree.root = root;

   std::cout<<"Postorder: ";
   tree.postorder();
   std::cout<<"\n";

   // 补充:实际项目中记得delete申请的节点,避免内存泄漏
   delete num2;
   delete root;
   return 0;
}

修正后运行会正常输出Postorder: 10 12 ,符合后序遍历的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:18:04