zoukankan      html  css  js  c++  java
  • 树的遍历

    树的遍历

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef char ElemType;
    
    /*二叉树节点数据结构*/
    typedef struct node{
        ElemType data;
        struct treenode *lChild;
        struct treenode *rChild;
    } TreeNode;
    
    /*使用先序遍历创建二叉树*/
    TreeNode *createBiTreeInPreOrder(){
        ElemType ch;
        TreeNode *T;
        
        scanf("%ch", &ch);    //这样调用scanf函数时,树的节点一次全部输入,如果要一次输入一个的话,那么在格式化字符串%ch前面加上空格即可
        if(ch != '#'){
            T = (TreeNode *)malloc(sizeof(TreeNode));
            if(T == NULL){
                printf("内存空间不足,程序退出
    ");
                exit(-1);
            }
            T->data = ch;
            T->lChild = createBiTreeInPreOrder();
            T->rChild = createBiTreeInPreOrder();
        } else{
            T = NULL;
        }
    
        return T;
    }
    
    /*使用中序遍历创建二叉树*/
    TreeNode *createBiTreeInInOrder(){
        ElemType ch;
        TreeNode *T;
        
        scanf("%ch", &ch);    //这样调用scanf函数时,树的节点一次全部输入,如果要一次输入一个的话,那么在格式化字符串%ch前面加上空格即可
        if(ch != '#'){
            T = (TreeNode *)malloc(sizeof(TreeNode));
            if(T == NULL){
                printf("内存空间不足,程序退出
    ");
                exit(-1);
            }
            T->lChild = createBiTreeInInOrder();
            T->data = ch;
            T->rChild = createBiTreeInInOrder();
        } else{
            T = NULL;
        }
    
        return T;
    }
    
    /*使用后序遍历创建二叉树*/
    TreeNode *createBiTreeInPostOrder(){
        ElemType ch;
        TreeNode *T;
        
        scanf("%ch", &ch);    //这样调用scanf函数时,树的节点一次全部输入,如果要一次输入一个的话,那么在格式化字符串%ch前面加上空格即可
        if(ch != '#'){
            T = (TreeNode *)malloc(sizeof(TreeNode));
            if(T == NULL){
                printf("内存空间不足,程序退出
    ");
                exit(-1);
            }
            T->lChild = createBiTreeInPostOrder();
            T->rChild = createBiTreeInPostOrder();
            T->data = ch;
        } else{
            T = NULL;
        }
    
        return T;
    }
    
    /*先序遍历*/
    void PreOrderTraverse(TreeNode *T)
    {
        ElemType data;
        if(T!=NULL)
        {
            data=T->data;
            printf("%c ",data);
            PreOrderTraverse(T->lChild);
            PreOrderTraverse(T->rChild);
        }
    }
    
    /*中序遍历*/
    void InOrderTraverse(TreeNode *T)
    {
        ElemType data;
        if(T!=NULL)
        {
            data=T->data;
            InOrderTraverse(T->lChild);
            printf("%c ",data);
            InOrderTraverse(T->rChild);
        }
    }
    
    /*先序遍历*/
    void PostOrderTraverse(TreeNode *T)
    {
        ElemType data;
        if(T!=NULL)
        {
            data=T->data;
            PostOrderTraverse(T->lChild);
            PostOrderTraverse(T->rChild);
            printf("%c ",data);
        }
    }
    
    
    
    int main(void){
        char ch;
    
        TreeNode *tree;
        tree = createBiTreeInPreOrder();
    
        PreOrderTraverse(tree);
    
        scanf("%c", &ch);
        scanf("%c", &ch);
        return 0;
    }
  • 相关阅读:
    Repeater1绑定数据,编辑数据的一些参考文章
    UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射) (转)
    asp.net下linkbutton的前后台使用方法
    sqlserver 中判断是否数字,是否汉字的方法
    asp.net中Excel导入(使用微软OLEDB驱动)
    asp.net获取URL和IP地址
    警告: 程序集绑定日志记录被关闭。
    301永久重定向asp.net实现方法
    Net程序如何防止被注入
    C++实现wc.exe程序
  • 原文地址:https://www.cnblogs.com/qixinbo/p/7891074.html
Copyright © 2011-2022 走看看