我的二叉树创建与打印代码无输出,求排查错误原因
二叉树代码无输出问题的排查与修正
你的代码运行无输出的核心问题是二叉树节点的指针成员未初始化,导致程序触发未定义行为提前终止,中序打印逻辑根本没执行。
具体错误点
node结构体的构造函数仅初始化了data字段,但l(左子节点指针)和r(右子节点指针)没有被初始化为nullptr,这两个指针会变成野指针(指向内存中随机的无效地址)。- 当
add函数第一次尝试访问curr->l或curr->r时(比如第一次调用add处理{'L','R'}方向时,访问根节点的l指针),由于野指针的存在,程序会触发断言失败或者直接崩溃,导致后续的print_inorder函数完全没有机会执行,因此没有任何输出。
修正后的代码
只需要修改node结构体的构造函数,初始化左右指针为空即可:
#include <iostream> #include <vector> #include <cassert> using namespace std; struct node { int data; node* r; node* l; // 初始化左右指针为nullptr,避免野指针 node(int data):data(data), l(nullptr), r(nullptr){}; }; void add(node*&root,vector<int>value,vector<char>direction) { assert(value.size()==direction.size()); node*curr=root; for(int i=0;i<(int)value.size();i++) { if(direction[i]=='R') { if(curr->r) assert(curr->r->data==value[i]); else { node*n=new node(value[i]); curr->r=n; curr=curr->r; } } else if(direction[i]=='L') { if(curr->l) assert(curr->l->data==value[i]); else { node*n=new node(value[i]); curr->l=n; curr=curr->l; } } } } void print_inorder(node*curr) { if(!curr) return; print_inorder(curr->l); cout<<curr->data<<" "; print_inorder(curr->r); } int main() { node* root=new node(1); add(root,{2,5},{'L','R'}); add(root,{2,4,6},{'L','L','L'}); add(root,{3,7},{'R','R'}); print_inorder(root); return 0; }
运行结果
修正后程序会正常输出中序遍历结果:
6 4 2 5 1 3 7
内容的提问来源于stack exchange,提问作者Zainab Emad
相关产品推荐
相关产品推荐

