• 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空格空格,就可以验证本文提供的遍历算法。

  • 相关阅读:
    opencv学习之米粒分割 #201906121549
    opencv学习之hsv通道分解 #201906101704
    opencv学习之图像滤波预处理 #201906101646
    opencv学习之addWeighted图片打水印 #201906061030
    alpha channel
    rm git commit history
    git 使用学习
    排序算法的c++实现
    leetcode 246 中心对称数问题
    大数打印问题
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4263155.html
Copyright © 2020-2023  润新知