Tree CreateTree(Tree T){
// 按先后次序输入二叉树中结点的值(一个字符),空格表示空树 // 构造二叉链表表示的二叉树T
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(TNode *)malloc(sizeof(TNode))))
exit(OVERFLOW);
T->data=ch; // 生成根节点
T->lchild=CreateTree(T->lchild); // 构造左子树
T->rchild=CreateTree(T->rchild); // 构造右子树
}
return T;
}
Status FirstRecursionTraverse(Tree T,Status (*Visit)(ElemType e))
{ // 先序遍历递归算法
if(T){
if(!Visit(T->data)) return ERROR;
FirstTraverse(T->lchild,Visit);
FirstTraverse(T->rchild,Visit);
}
return OK;
}
Status MidTraverse(BiTree T,Status (*Visit)(ElemType e))
{ // 中序遍历递归算法
if(T){
MidTraverse(T->lchild,Visit);
if(!Visit(T->data)) return ERROR;;
MidTraverse(T->rchild,Visit);
}
return OK;
}
Status LaterTraverse(BiTree T,Status (*Visit)(ElemType e))
{ //后序遍历递归算法
if(T){
LaterTraverse(T->lchild,Visit);
LaterTraverse(T->rchild,Visit);
if(!Visit(T->data)) return ERROR;;
}
return OK;
}
学了指针,想起之前学过的数据结构,利用所学的东西 也顺便练练手! |