初冀 2023-04-19 20:44 采纳率: 61%
浏览 103
已结题

将顺序存储二叉树,转换成二叉链表


/*5.18设计算法将一棵以顺序存储方式存储在数组A[]中的二叉树
(已转换为完全二叉树,补充的虚拟结点为值为’#’)转换为二叉链表存储形式。
*/
#include <iostream>
using namespace std;
#define max 100
typedef char element;
typedef struct lBNode {
    element data;
    struct lBNode* lChild, * rChild;
}BiNode, * BiTree;
typedef struct sList {
    element  data[100];
    int listLen;//定义表长度分量
}seqList;
void initiList(seqList* L) {
    L->listLen = 0;
}
int listLenth(seqList*& T) {
    return T->listLen;
}
//交互输入创建顺序存储二叉树
void createBTNode(seqList*& T) {
    int i = 1;
    element  x;
    cout << "请从根结点开始按完全二叉树层次输入结点,缺少结点输入'#',输入'!'结束。" << endl;
    cin >> x;
    while (x != '!')
    {
        T->data[i] = x;
        T->listLen++;
        i++;
        cin >> x;
    }
}
//转换函数
void  trans(BiNode* T,seqList* a, int i) {
    if (a->data[i] != '#') {
        BiNode* b = new BiNode;
        b->data = a->data[i];
        b->lChild = NULL;
        b->rChild = NULL;
        T = b;
          trans( T->lChild, a, 2 * i);
          trans(T->rChild, a, 2 * i + 1);
    }
    else {
        T = NULL;
    }
}
//先序遍历二叉链表
void preTraverse(BiNode* T)
{
    if (T)
    {
        cout << T->data << " ";         //访问根结点。打印当前结点元素值,替代visit(T)函数
        preTraverse(T->lChild);     //先序遍历左子树
        preTraverse(T->rChild);     //先序遍历右子树
    }
}
int main() {
    seqList *L=new seqList;
    initiList(L);
    BiNode* T=NULL;
    createBTNode(L);
    trans(T,L, 1);
    preTraverse(T);
    return 0;
 }

为什么输完顺序表里的数程序九崩了,编译是没有问题的

img

  • 写回答

4条回答 默认 最新

  • William_H_25 2023-04-19 20:56
    关注

    在程序中出现了指针传参的问题,即在转换函数 trans() 中,应该传入指向指针的指针,以便在函数内部改变指针的指向。同时,在调用 trans() 函数时,应该传入指向指针的指针,而不是指向指针的普通指针。
    具体地,修改 trans() 函数定义如下:
    c++

    void trans(BiNode*& T, seqList* a, int i)
    修改 main() 函数调用 trans() 函数的语句如下:
    c++

    trans(T, L, 1);
    这样修改之后,程序应该就能正确运行了。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月20日
  • 创建了问题 4月19日

悬赏问题

  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询