/*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;
}
为什么输完顺序表里的数程序九崩了,编译是没有问题的