树是树型结构的简称。若树中各节点的子树是按照一定的次序从左到右安排的,则称之为有序树,否则称为无序树。
森林是m(m>=0)棵互不相交的树的集合。
树的性质:
1,树中的结点数等于所有结点的度数加1.
2,度为k的树中第i层上至多有k^(i-1)个结点(i>=1).
3,深度为h的k叉树至多有(k^h-1)/(k-1)个结点。
4,具有n个结点的k叉树的最小深度为logk(n(k-1)+1的上取整数。
二叉树是指树的度为2的有序树。
二叉树的存储结构:
strcut BTreeNode{
ElemType data;
struct BTreeNode* left;
struct BTreeNode* right;
}
初始化二叉树
void InitBTree(struct BTreeNode** BT)
{
*BT=NULL;
}
建立二叉树:
我们的算法是由广义表字符串建立一个二叉树,广义表的样式为(A(B(C),D(E(F,G),H(,I)))
void CreateBTree(struct BTreeNode** BT, char* a)
{
struct BTreeNode* p;
struct BTreeNode* s[StackMaxSize];
int top=-1;
int k;
int i=0;
*BT=NULL;
while(a[i])
{
switch(a[i]){
case ' ':
break;
case '(':
if(top==StackMaxSize-1){
printf("stack is too small ,please increase!\n");
exit(1);
}
top++;s[top]=p;k=1;
break;
case ')':
if(top==-1){
printf("a is not valid!\");
exit(1);
}
top--;break;