按照先序顺序创造一个二叉树:
递归方式,若输入的值为空格,则相应的结点为空;若输入的值不为空格,
则T->data为相应的值,然后继续递归左子树。
Status CreateBitree(BiTree &T){
//按照先序顺序建造一个二叉树
char ch;
scanf("%c",&ch);
if(ch==’ ')
T=NULL;
else{
if(!(T=(BiTree)malloc(sizeof(BiTNode)))) exit(FULL);
else{
T->data = ch;
CreateBitree(T->lchild );//建立左子树
CreateBitree(T->rchild );//建立右子树
}
return OK;
}
}
先序遍历:
Status PreOrderTraverse(BiTree &T,Status(*Visit)(char e)){
//先序遍历,递归
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
}
else return OK;
}
中序遍历:
Status InOrderTraverse(BiTree &T,Status(*Visit)(char e)){
//中序遍历,递归
if(T){
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit) )return OK;
return ERROR;
}
else return OK;
}
后序遍历:
Status PostOrderTraverse(BiTree &T,Status(*Visit)(char e)){
//后序遍历,递归
if(T){
if(PostOrderTraverse(T->lchild ,Visit))
if(PostOrderTraverse(T->rchild ,Visit))
if(Visit(T->data )) return OK;
}
else return ERROR;
}