构造二叉树——顺序存储结构转化为链式存储结构

  • 问题描述:设有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 }

 

posted @ 2017-05-09 16:40  LarryXXXXXXXXX  阅读(7864)  评论(0编辑  收藏  举报