zoukankan      html  css  js  c++  java
  • 二叉树链式存储结构

    #include <stdio.h>
    #include <stdlib.h>
    
    #define TRUE 1
    #define FALSE 0
    #define OVERFLOW -2
    #define OK 1
    #define ERROR 0
    
    typedef int Status;
    typedef int TElemType;
    
    /*
     * 存储结构
     */
    typedef struct BiTNode
    {
        TElemType data;    //数据
        struct BiTNode *lchild, *rchild;
    }BiTNode, *BiTree;
    
    /*
     * 创建二叉树,输入0表示创建空树
     */
    Status CreateBiTree(BiTree *T)
    {
        TElemType e;
        scanf("%d", &e);
        if (e == 0)
        {
            *T = NULL;
        }
        else
        {
            *T = (BiTree) malloc(sizeof(BiTNode));
            if (!T)
            {
                exit(OVERFLOW);
            }
            (*T)->data = e;
            CreateBiTree(&(*T)->lchild);    //创建左子树
            CreateBiTree(&(*T)->rchild);    //创建右子树
        }
        return OK;
    }
    
    /*
     * 访问元素
     */
    void visit(TElemType e)
    {
        printf("%d ", e);
    }
    
    /*
     * 先序遍历二叉树:指先访问根,然后访问孩子的遍历方式
     */
    Status PreOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            visit(T->data);
            PreOrderTraverse(T->lchild, visit);
            PreOrderTraverse(T->rchild, visit);
        }
    }
    
    /*
     * 中序遍历二叉树:指先访问左(右)孩子,然后访问根,最后访问右(左)孩子的遍历方式
     */
    Status InOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            InOrderTraverse(T->lchild, visit);
            visit(T->data);
            InOrderTraverse(T->rchild, visit);
        }
    }
    
    /*
     * 后序遍历二叉树:指先访问孩子,然后访问根的遍历方式
     */
    Status PostOrderTraverse(BiTree T, void (*visit)(TElemType))
    {
        if (T)
        {
            PostOrderTraverse(T->lchild, visit);
            PostOrderTraverse(T->rchild, visit);
            visit(T->data);
        }
    }
    
    int main()
    {
        BiTree T;
        printf("创建树,输入0为空树:
    ");
        CreateBiTree(&T);
        printf("先序遍历:");
        PreOrderTraverse(T, *visit);
        printf("
    中序遍历:");
        InOrderTraverse(T, *visit);
        printf("
    后序遍历:");
        PostOrderTraverse(T, *visit);
        printf("
    ");
    
        return 0;
    }
  • 相关阅读:
    Java中的equals方法和==的区别
    C语言学习笔记--单向链表Markdown版本
    Tamias Blog's
    nginx图片服务器
    Nginx安装解决报错
    Detour框架注入样本无法正常启动(0x000007b)
    结构体指针中包含结构体指针
    Linux开发准备:Ubuntu14.04+Samba+MobaXterm+Source Insight 4.0
    在Visual Studio中将dll以资源的形式嵌入exe中
    MACD的价值不在于“金叉死叉”而在于背离
  • 原文地址:https://www.cnblogs.com/kxzh/p/10919955.html
Copyright © 2011-2022 走看看