具有n个结点的完全二叉树,使用顺序存储结构在顺序表BT[1.n](数组BT[]中存放结点中元 素data),请编写算法建立该二叉树链表存储结构。结点个数n是公共变量。 typedef struct BiTNode( TElemType data; Struct BiTNode *Ichild,*rchild; ] BiTNode *BiTree; 递归算法编制,void createBiTree (int BT[],int k, BiTree &bt)
时间: 2024-03-20 22:44:35 浏览: 55
完全二叉树的性质和顺序存储结构-树和森林--清华大学课程讲义-数据结构(PPT)
好的,以下是代码实现:
```
void createBiTree(int BT[], int k, BiTree &bt) {
if (k > n) { // 当前结点编号超过总结点数,返回空指针
bt = NULL;
} else {
bt = (BiTree) malloc(sizeof(BiTNode)); // 创建新结点
bt->data = BT[k];
createBiTree(BT, 2 * k, bt->lchild); // 递归构建左子树
createBiTree(BT, 2 * k + 1, bt->rchild); // 递归构建右子树
}
}
```
解释如下:
输入参数:
- BT[]: 存放结点中元素data的顺序表数组
- k: 当前结点在顺序表中的下标
- bt: 当前二叉树结点的指针
返回值:
- 无返回值,通过参数bt传递结果
实现方式:
- 判断当前结点编号是否超过总结点数n,如果是,返回空指针,否则继续执行下面的步骤。
- 创建新结点,并将顺序表中对应下标的元素赋值给该结点的data成员。
- 递归构建左子树,下标为当前下标的两倍。
- 递归构建右子树,下标为当前下标的两倍加一。
最终,通过参数bt返回构建好的二叉树的根结点。
阅读全文