zoukankan      html  css  js  c++  java
  • C语言递归实现二叉树的先序、中序、后序遍历

    #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("请按先序次序输入二叉树中结点的值(字符),空格字符表示空树:
    ");  
        CreateBiTree(T);      
    	
        printf("先序遍历结果为:");  
        PreOrderTraverse(T);  
        printf("
    
    ");   
    	
        printf("中序遍历结果为:");  
        InOrderTraverse(T);  
        printf("
    
    ");   
    	
        printf("后序遍历结果为:");  
        PostOrderTraverse(T);      
        printf("
    
    ");      
    	
        return 0;      
    }    

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


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

  • 相关阅读:
    Python_函数
    Python中元组,列表,字典的区别
    Oracle 在字符串中输入单引号或特殊字符
    Visual Studio Code管理MySQL
    Python .pyc的编译和反编译
    Django 模板变量之 forloop
    浅谈Django基础(HttpResponse、render、redirect)
    Django 使用form表单提交数据报错: Forbidden (403)
    Django出错提示TemplateDoesNotExist at /
    使用 vs code 创建 Django 项目
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4263155.html
Copyright © 2011-2022 走看看