构造二叉树——顺序存储结构转化为链式存储结构
- 问题描述:设有n个节点的二叉树采用顺序存储结构存储在数组BT中,编写函数由该数组创建的二叉链式存储结构
- 思路:假定BT数组中顺序存储顺序为层次遍历的顺序
BT数组中的下标 与 二叉树节点按层次遍历编号 如图:
即得到节点的值等于BT[K-1],k为节点编号,以及如下图根节点与左右子树的编号规律
则可以利用递归
递归一般分为三部分:
1.递归出口以及参数的容错处理
2.递归逻辑(在每一次调用做的事情)
3.递归调用
代码:
1 #include<iostream> 2 #include<string> 3 char BT[] = "ABCD#EF"; 4 int n = strlen(BT); 5 using namespace std; 6 typedef struct TNode{ 7 char data; 8 TNode *lchild, *rchild; 9 TNode(char d):data(d),lchild(NULL),rchild(NULL){}//构造函数 10 ~TNode(){delete lchild;delete rchild;} 11 }; 12 void Create(TNode **t,int k) 13 { 14 if (k>n||BT[k-1] == '#')//缺失一个=号,则t=NULL 15 { 16 *t = NULL; 17 }//递归出口 18 else 19 { 20 *t = new TNode(BT[k-1]);//递归逻辑 21 Create(&(*t)->lchild,2*k);//递归调用 22 Create(&(*t)->rchild,2*k+1); 23 } 24 25 } 26 int main() 27 { 28 TNode *t; 29 Create(&t,1);
30 31 }