先序遍历二叉树的操作定义是:
若二叉树为空,则操作为空,否则:1、访问根节点 。2、先序遍历左子树。3、先序遍历右子树。
例如,下图所示二叉树的遍历结果是:ABDECF
严蔚敏的《数据结构》中多采用伪代码,算法6-4中若直接运行会创建无效,没法输出创建的二叉树。需要将创建的结点赋值给该树。
结构定义:
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
创建、遍历函数
//先序序列建立二叉树的二叉链表
BiTree CreateBiTree(BiTree T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else{
if(!(T = (BiTNode *)malloc(sizeof(BiTNode)))) {
exit(OVERFLOW);
}
T->data = ch;
T->lchild = CreateBiTree(T->lchild);
T->rchild = CreateBiTree(T->rchild);
}
return T;
};
Status PrintElement(TElemType e){
printf("%c ",e);
return OK;
}
//先序遍历二叉树T的递归算法
Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e)){
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}else return OK;
}
main函数
int main() {
BiTree T = NULL;
T = CreateBiTree(T);
PreOrderTraverse(T,PrintElement);
return 0;
}
测试,用下面的树