二叉树的顺序存储

//二叉树的顺序存储结构
#define
MAX_TREE_SIZE 100 typedef int TElemType; TElemType Nil=0;//设整型以0为空 typedef TElemType SqBiTree[MAX_TREE_SIZE];//0号单元存储根结点

未完,写作整理中。。。

 2018-11-14   22:19:09

二叉树的性质:

1,在二叉树的第i层上至多有2i-1个结点(i>=1)。

ps:归纳法易证。

2,深度为k的二叉树至多有2k-1个结点(k>=1)。

3,n0=n2+1

4,具有n个结点的完全二叉树的深度为[log2n](down)+1 

 二叉树的基本操作:

 

 

 

/*初始化树*/

 

 1 int InitBiTree(SqBiTree T)
 2 {
 3     int i;
 4     for(i=0;i<MAX_TREE_SIZE;i++)
 5     {
 6         T[i]=Nil;
 7     }
 8     T[MAX_TREE_SIZE]='\0';    //给数组尾部加上结束标志
 9     return OK;
10 }

 

 

 

/*创建树*/

 1 int CreateBiTree(SqBiTree T)
 2 {
 3     int i=0;
 4     int l=0;
 5     char s[MAX_TREE_SIZE];
 6     printf("请按顺序输入结点的值,空格表示空结点,结点数<=%d\n",MAX_TREE_SIZE);
 7     gets(s);
 8     l=strlen(s);//strlen("hello")返回的结果是5,是不包含字符串结尾处的‘\0’,
 9                 //但是strcpy(str1,str2),会拷贝str2中的‘\0’。
10     for(;i<l;i++)
11     {
12         T[i]=s[i];
13         if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil)
14         {
15             printf("出现无双亲且不是根的结点.\n");
16             return ERROR;
17         }
18     }
19     /*for(;i<MAX_TREE_SIZE;i++)
20     {
21         T[i]=Nil;
22     }*/
23     return OK;
24 }

 

/*计算树的深度*/

/*判断树是否为空*/

BT数组中的下标与二叉树节点按层次遍历编号 如图:

 

根节点与左右子树的编号规律:

 

参考资料:https://www.cnblogs.com/zlspace/p/6831293.html

posted @ 2019-01-19 22:20  万物皆虚123  阅读(3342)  评论(0编辑  收藏  举报