文章

6

粉丝

0

获赞

31

访问

761

头像
二叉树遍历 题解:为什么我这个不可以啊来个大佬看看呗
P1161 清华大学/南京大学机试题
发布于2026年3月15日 21:08
阅读数 291

#include<bits/stdc++.h>
using namespace std;

typedef struct BTNode {
    char c;
    struct BTNode* lc, * rc;
} BTNode, * BiTree;

// 先序构建二叉树
void ct(BiTree &t, int &p, const string &s) {
    if (p >= s.size()) return;
    char a=s[p];
    if ( a== '#') {
        t = NULL;
        p++;
    } else {
        t = new BTNode;
        t->c = a;
        p++;
        ct(t->lc, p, s);
        ct(t->rc, p, s);
    }
}

// 修正后的中序遍历
void zx(BiTree t) {  // 不需要引用,因为不修改树
    if (t == NULL) return;
    zx(t->lc);
    cout << t->c << " ";
    zx(t->rc);
}

// 释放二叉树内存(可选)
void freeTree(BiTree t) {
    if (t == NULL) return;
 ...

登录查看完整内容


登录后发布评论

3 条评论
Liang_Pan
2026年3月16日 15:28

// 先序构建二叉树
void ct(BiTree &t, int &p, const string &s) {
    if (p >= s.size()) return;
    char a=s[p];
    if ( a== '#') {
        t = NULL;
        p++;
    } else {
        t = new BTNode;
        t->c = a;
        t->lc = NULL;
        t->rc = NULL;
        p++;
        ct(t->lc, p, s);
        ct(t->rc, p, s);
    }
}
左右孩子要初始化为NULL,不然你后面ct(t->lc, p, s)里面传进去的是随机的指针

赞(0)

19385567108 : 回复 Liang_Pan: 感谢,感谢

2026年3月18日 12:01

HKX9XAS : 回复 19385567108: if (p >= s.size()){ t = NULL; //这里加一句赋予空指针也行 return; } //你原来的遇到’#‘不省略时不会出问题,但当’#‘不足时,会导致最后的几个节点左右孩子是野指针

2026年3月23日 16:44
回复给: