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;
    }
  • 相关阅读:
    <modules>
    如何禁用Visual Studio 2013的Browser Link功能
    Visual Studio 2013 Web开发、新增功能:“Browser Link”
    MVC中的AppendTrailingSlash以及LowercaseUrls
    js如何关闭当前页,而不弹出提示框
    border-radius实例1
    border-radius讲解2
    border-radius讲解1
    Android服务Service具体解释(作用,生命周期,AIDL)系列文章-为什么须要服务呢?
    最小生成树-Prim算法和Kruskal算法
  • 原文地址:https://www.cnblogs.com/kxzh/p/10919955.html
Copyright © 2011-2022 走看看