//二叉树的顺序存储结构
#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