数组转二叉树

全部代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <assert.h>
 4 
 5 typedef struct node
 6 {
 7     int nValue;
 8     struct node *pLeft;
 9     struct node *pRight;
10 }BiTree;
11 
12 BiTree *ArrToBiTree(int arr[], int len)
13 {
14     BiTree *pRoot = NULL;
15     int i;
16 
17     assert(arr!=NULL && len>0);
18 
19     //创建结构体数组
20     pRoot = (BiTree *)malloc(sizeof(BiTree)*len);
21     if(NULL == pRoot)
22     {
23         printf("pRoot空间分配失败!\n");
24         exit(-1);
25     }
26     
27     //结构体数组赋初值
28     for(i=0; i<len; ++i)
29     {
30         pRoot[i].nValue = arr[i];
31         pRoot[i].pLeft = NULL;
32         pRoot[i].pRight = NULL;
33     }
34 
35     //父亲节点与左右孩子关联
36     for(i=0; i<=len/2-1; ++i)
37     {
38         //有左孩子
39         if(2*i+1 < len)
40         {
41             pRoot[i].pLeft = &pRoot[2*i+1];
42         }
43 
44         //有右孩子
45         if(2*i+2 < len) 
46         {
47             pRoot[i].pRight = &pRoot[2*i+2];
48         }
49     }
50 
51     return pRoot;
52 }
53 
54 void PrevOrderTraversal(BiTree *pRoot)
55 {
56     if(NULL == pRoot)
57     {
58         return;
59     }
60 
61     printf("%d ", pRoot->nValue);
62     PrevOrderTraversal(pRoot->pLeft);
63     PrevOrderTraversal(pRoot->pRight);
64 }
65 
66 int main(void)
67 {
68     BiTree * pRoot = NULL;
69 
70     int arr[] = {1, 2, 3, 4, 5, 6, 7};
71     int len = sizeof(arr)/sizeof(arr[0]);
72     pRoot = ArrToBiTree(arr, len);
73     PrevOrderTraversal(pRoot);
74 
75     return 0;
76 }

 

posted @ 2017-11-09 20:04  c&z  阅读(1854)  评论(0编辑  收藏  举报