码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-17 00:00:03      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:二叉树   先序遍历   中序遍历   后序遍历   递归   

#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;      
}    

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

bubuko.com,布布扣

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

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

标签:二叉树   先序遍历   中序遍历   后序遍历   递归   

原文地址:http://blog.csdn.net/mengwang024/article/details/40157091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!