(1)
void CrtBT(BiTree& T, char pre[], char ino[],
int ps, int is, int n ) {
// 已知pre[ps..ps+n-1]为二叉树的先序序列,
// ino[is..is+n-1]为二叉树的中序序列,本算法由此两个序列构造二叉链表 ,ps为先序序列的开始位置,is为中序序列的开始位置,n为序列长度
if (n==0) T=NULL;
else {
k=Search(ino, pre[ps]); //查询先序序列中的
//第一个字符在中序序列中的位置
if (k== -1) T=NULL;
else { }
}
} // CrtBT
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data = pre[ps];
if (k==is) T->Lchild = NULL; //先序序列中第一个字
符在中序序列中也是第一个字符,则表示没有左子树
else CrtBT(T->Lchild, pre[], ino[],
ps+1, is, k-is );
if (k==is+n-1) T->Rchild = NULL; //先序序列中第一
个字符在中序序列中是最后一个字符,则表示没有右子树
else CrtBT(T->Rchild, pre[], ino[],
ps+1+(k-is), k+1, n-(k-is)-1 );
(3)
Int CountLeaf (BiTree T) {
if (T==NULL) return 0;
else if (T->lchild==NULL &&
T->rchild==NULL) return 1;
else return CountLeaf(T->lchild) +
CountLeaf(T->rchild);
}