zoukankan      html  css  js  c++  java
  • 数据结构顺序二叉树

    本文内容

    • 环境
    • 基本结构 basic.h
    • 顺序二叉树 sqbitreee.h 文件
    • 顺序二叉树 sqbitreee.c 文件
    • 测试

    本文主要是创建一个棵顺序二叉树,毕竟要是想测试什么算法的话,总得有一棵才行。

    环境


    • codeblock 12.11
    • Windows 7 旗舰版 64位

    基本结构 basic.h


    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
     
    /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
    typedef int Status;
     
    typedef int TElementType;

    顺序二叉树 sqbitree.h 文件


    #ifndef SQBITREE_H_INCLUDED
    #define SQBITREE_H_INCLUDED
     
    #include "basic.h"
     
    /* 顺序二叉树只适合完全二叉树 */
     
    /* 顺序二叉树的最大结点数 */
    #define MAX_TREE_SIZE 100
    /* 0号单元存储根结点 */
    typedef TElementType SqBiTree[MAX_TREE_SIZE];
    /* 初始化顺序二叉树 */
    Status InitSqBiTree(SqBiTree T);
    /* 创建顺序二叉树 */
    Status CreateSqBiTree(SqBiTree T);
    /* 置空顺序二叉树 */
    Status IsSqBiTreeEmpty(SqBiTree T);
    /* 顺序二叉树深度 */
    int SqBiTreeDepth(SqBiTree T);
    /* 顺序二叉树根节点 */
    Status SqBiTreeRoot(SqBiTree T, TElementType *e);
    /* 按数组输出顺序二叉树 */
    void PrintSeq(SqBiTree T);
     
    #endif

    顺序二叉树 sqbitree.c 文件


    #include "basic.h"
    #include "sqbitree.h"
    #include <stdio.h> /* EOF(=^Z或F6),NULL */
    #include <math.h>  /* floor(),ceil(),abs() */
    #include <stdlib.h>
     
    /* 初始化
       构造空顺序二叉树。T 是固定大小数组,不需要 &
       初值为 -1
     */
    Status InitSqBiTree(SqBiTree T)
    {
        int i;
        for(i=0; i<MAX_TREE_SIZE; i++) T[i] = -1;
        return OK;
    }
    /* 创建
       按层序次序输入二叉树中结点的值(字符型或整型), 构造顺序存储的二叉树T
       -1 表示空节点
       -2 表示创建结束
    */
    Status CreateSqBiTree(SqBiTree T)
    {
        int i=0;
        TElementType e;
        printf("请按层序输入结点的值(正整型),结点数≤%d:\n", MAX_TREE_SIZE);
        while(1)
        {
            scanf("%d", &e);
            if(e==-2) break;
            T[i]=e;
            if( i!=0 && T[(i+1)/2 - 1]==-1 && T[i]!=-1 ) /* 此结点(不空)无双亲且不是根 */
            {
                printf("错误,无双亲的非根结点 %d\n",T[i]);
                exit(ERROR);
            }
            i++;
        }
        return OK;
    }
    /* 置空
       初始条件: 二叉树T存在
       操作结果: 若T为空二叉树,则返回TRUE,否则FALSE */
    Status IsSqBiTreeEmpty(SqBiTree T)
    {
        if(T[0]==-1) /* 根结点为空,则树空 */
            return TRUE;
        else
            return FALSE;
    }
    /* 深度
       初始条件: 二叉树T存在。
       操作结果: 返回T的深度 */
    int SqBiTreeDepth(SqBiTree T)
    {
        int i;
        for(i=MAX_TREE_SIZE-1; i>=0; i--) /* 找到最后一个结点 */
            if(T[i]!=-1) break;
        i++;
        return floor(log2(i))+1;
    }
    /* 根节点值
       初始条件: 二叉树T存在
       操作结果:  当T不空,用e返回T的根,返回OK;否则返回ERROR,e无定义 */
    Status SqBiTreeRoot(SqBiTree T, TElementType *e)
    {
        if(IsSqBiTreeEmpty(T)) return ERROR;
        else
        {
            *e=T[0];
            return OK;
        }
    }
     
    void PrintSeq(SqBiTree T)
    {
        int i;
        for(i=0; i<MAX_TREE_SIZE; i++)
            printf("%d ", T[i]);
    }

    测试


    Status i;
    TElementType e;
    SqBiTree T;
    InitSqBiTree(T);
    CreateSqBiTree(T);
    printf("\n建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n", IsSqBiTreeEmpty(T), SqBiTreeDepth(T));
    i = SqBiTreeRoot(T,&e);
    if(i)
        printf("\n二叉树的根为:%d\n", e);
    else
        printf("树空,无根\n");
    PrintSeq(T);

    2013-04-20_123031

    下载 Demo

  • 相关阅读:
    设置材质球的材质,是第几个
    转载渲染。
    系统的时间调不错,就是界面躁动太多,要是允许话还是在自己的界面中加入比较薄, 不过这个很方便。
    清除poly修改器的脚本,效果还好。
    不用string了用getFilenameFile 函数 索引名字更快
    判断平pickbutton 节点是否被删除, 这个事件放在点击事件之内。
    字符串加入到数组的号办法。
    收集每个mesh 面的id 号, 这个很有用,可以用来查找物体共有几个id 效果好。
    Evervolv android 源码编译
    zoj 2112 Dynamic Rankings(SBT in SegTree)
  • 原文地址:https://www.cnblogs.com/liuning8023/p/3032179.html
Copyright © 2011-2022 走看看