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

我的二叉树创建与打印代码无输出,求排查错误原因

二叉树代码无输出问题的排查与修正

你的代码运行无输出的核心问题是二叉树节点的指针成员未初始化,导致程序触发未定义行为提前终止,中序打印逻辑根本没执行。

具体错误点

  • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:01:28