先历序遍思路:1.访问根节点;2.访问当前节点的左子树;3.若当前节点无左子树,则访问当前节点的右子树;即考察到一个节点后,即刻输出该节点的值,并继续遍历其左右子树。(根左右)
中历序遍思路:1.访问当前节点的左子树;2.访问根节点;3.访问当前节点的右子树。即考察到一个节点后,将其暂存,遍历完左子树后,再输出该节点的值,然后遍历右子树。(左根右)
后序遍历:1.访问左子树;2.访问右子树;3.完成该节点的左右子树的访问后,再访问根节点。即考察到一个节点后,将其暂存,遍历完左右子树后,再输出该节点的值。(左右根)
在遍历之前应先创建一棵树。采用递归的思想来创建,具体实现
0)定义结构体
typedef struct bi_tnode
{
char data;
struct bi_tnode *lchild,*rchild;
}bitree_node, *bitree;1)创建
bitree create_bitree(void)
{
char ch;
bitree T;
if(ch=='#')
return NULL;
if(T=(bitree)malloc(sizeof(bitree_node)))==NULL)
{
printf("malloc failed\n");
return NULL;
}
T->data=ch;
T->lchild=create_bitree();
T->rchild=create_bitree();
return T;
}2)前序遍历
void pre_order(bitree T)
{
if(T !=NULL){
printf("%c",T->data); //访问根节点
pre_order(T->lchild); //遍历左子树
pre_order(T->rchild); //再遍历右子树
}
}3)中序遍历
void in_order(bitree T)
{
if(T !=NULL){
in_order(T->lchild); //遍历左子树
printf("%c",T->data); //访问根节点
in_order(T->rchild); //再遍历右子树
}
}4)后序遍历
void end_order(bitree T)
{
if(T !=NULL){
end_order(T->lchild); //遍历左子树
end_order(T->rchild); //再遍历右子树
printf("%c",T->data); //访问根节点
}
}


京公网安备 11010502036488号