二叉树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
相关产品推荐
相关产品推荐

