现在的位置: 首页 > 综合 > 正文

C语言递归实现二叉树的先序、中序、后序遍历

2017年08月07日 ⁄ 综合 ⁄ 共 1329字 ⁄ 字号 评论关闭
#include <stdio.h>  
#include <stdlib.h>  
//*****二叉树的二叉链表存储表示*****//  
typedef struct BiNode  
{  
    char data;  
    struct BiNode *lchild, *rchild;  
}BiNode, *BiTree;  

//*****按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树构造二叉链表表示的二叉树T*****//   
void CreateBiTree(BiTree &T)          
{                                     
    char ch;  
    scanf("%c", &ch);  
    if(ch == ' ')  
    {  
        T = NULL;  
    }  
    else  
    {  
        if(!(T = (BiNode *)malloc(sizeof(BiNode))))   
        {  
            return;  
        }  
        T->data = ch;                    //生成根结点  
        CreateBiTree(T->lchild);     //构造左子树  
        CreateBiTree(T->rchild);     //构造右子树  
    }  
	
    return;  
}  

//*****先序遍历二叉树*****//   
void PreOrderTraverse(BiTree T)  
{  
    if(!T)   
    {  
        return;                             //若T为空树,则直接返回  
    }  
    printf("%c ", T->data);                  //访问根结点  
    PreOrderTraverse(T->lchild);         //先序遍历左子树  
    PreOrderTraverse(T->rchild);         //先序遍历右子树  
	
    return;  
}  

//*****中序遍历二叉树*****//   
void InOrderTraverse(BiTree T)  
{  
    if(!T)  
    {  
        return;                             //若T为空树,则直接返回  
    }  
    InOrderTraverse(T->lchild);              //中序遍历左子树  
    printf("%c ", T->data);                  //访问根结点  
    InOrderTraverse(T->rchild);              //中序遍历右子树  
	
    return;  
}  

//*****后序遍历二叉树*****//   
void PostOrderTraverse(BiTree T)  
{  
    if(!T)  
    {  
        return;                             //若T为空树,则直接返回  
    }  
    PostOrderTraverse(T->lchild);            //后序遍历左子树  
    PostOrderTraverse(T->rchild);            //后序遍历右子树  
    printf("%c ", T->data);                  //访问根结点  
	
    return;  
}  

int main(void)  
{  
    BiTree T;      
    printf("请按先序次序输入二叉树中结点的值(字符),空格字符表示空树:\n");  
    CreateBiTree(T);      
	
    printf("先序遍历结果为:");  
    PreOrderTraverse(T);  
    printf("\n\n");   
	
    printf("中序遍历结果为:");  
    InOrderTraverse(T);  
    printf("\n\n");   
	
    printf("后序遍历结果为:");  
    PostOrderTraverse(T);      
    printf("\n\n");      
	
    return 0;      
}    

以如下二叉树为例,给出按先序次序输入二叉树中结点的值(字符),从而按照本文给出的算法构造二叉树。

输入字符的顺序是:-+a空格空格*b空格空格-c空格空格d空格空格/e空格空格f空格空格,即可验证本文提供的遍历算法。

抱歉!评论已关闭.