.BiTree Creat(ElemType A[]int i)
//n个结点的完全二叉树存于一维数组A中本算法据此建立以二叉链表表示的完全二叉树
{BiTree tree;
if (i<=n){tree=(BiTree)malloc(sizeof(BiNode)); tree>data=A[i];
if(*i>n) tree>lchild=nullelse tree>lchild=Creat(A*i)
if(*i+>n) tree>rchild=nullelse tree>rchild=Creat(A*i+) }
return (tree) }//Creat
[算法讨论]初始调用时i=
[题目分析]二叉树高度可递归计算如下若二叉树为空则高度为零否则二叉树的高度等于左右子树高度的大者加这里二叉树为空的标记不是null而是设根结点层号为则每个结点的层号等于其双亲层号加
现将二叉树的存储结构定义如下:
typedef struct node
{int L[];//编号为i的结点的左儿子
int R[];//编号为i的结点的右儿子
int D[];//编号为i的结点的层号
int i; //存储结点的顺序号(下标)
}tnode;
()int Height(tnode tint i)//求二叉树高度调用时i=
{int lhrh;
if (i==) return ();
else{lh=Height(ttL[i]); rh=Height(ttR[i]);
if(lh>rh) return(lh+); else return(rh+);
}
}//结束Height
()int Level(tnode t)//求二叉树各结点的层号已知编号为的结点是根且层号为
{tD[]=;
for(i=;i<=n;i++) {depth=tD[i] //取出根结点层号
if(tL[i]!=) tD[tL[i]]=depth+; //i结点左儿子层号
if(tR[i]!=) tD[tR[i]]=depth+; }//i结点右儿子层号
}结束level
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []