`
lee_3do
  • 浏览: 24994 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一些常用的数据结构(五):树

阅读更多

     树中元素的度是指其孩子的个数,树的度是指其元素度的最大值,树的级应该是指树的层数,树根的级为1。

     二叉树中每个元素的度均小于等于二即可,并没有其他额外的限制。

     若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的节点都连续集中在最左边,这就是完全二叉树。 完全二叉树通俗一点说就是上面一行不满不能往下面添加元素的树,好处是可以用编号找到指定位置的元素,堆是一棵完全二叉树。

     满二叉树一棵深度为h且有 2h-1个结点的二叉树。

 

 

     关于树的遍历那些前序中序后序中的前中后指的是当前节点的值,逐层遍历则采用队列来实现。

        得到树的高度:

 int getHeight(BinaryTreeNode t)
{
   if(!t)return 0;//t是指传入的数结点
   int lHeight=getHeight(t->leftChild);
   int rHeight=getHeight(t->rightChild);
   return (lHeigt>rHeight?lHeight:rHeight)++;
} 

 最大堆是指所有节点的值都大于或等于其子节点的值的完全二叉树。

向堆中插入元素:

//向堆中插入元素
void Insert(int x)
{
    int i=++Size;//size为堆当前的大小
    while(i!=1&&x>heap[i/2])
    {
        heap[i]=heap[i/2];
        i=i/2;
    }
    heap[i]=x;
}
 //删除:删除根节点,然后抽出最后一个节点,
//从根位置开始往下找合适的位置插入

int HeapDelete(int h[])
{
    int x = h[1]; //最大元素,即根
    //-------------重构堆---------------
    int y = h[CurrSize--]; //最后一个元素
    int i=1/*当前节点*/,pi=2/*i的孩子*/;
    while(pi <= CurrSize)
    {
        if(pi < CurrSize && h[pi] < h[pi+1])
            pi++; //若存在右孩子且右孩子较大,则pi指向右孩子
        //此时pi已指向i的孩子中较大者
        if(y >= h[pi]) break; //y可插入h[i]
        h[i] = h[pi]; //不可插入则上移较大孩子
        i = pi; pi = pi*2;  //继续往下做比较
    }
    h[i] = y;  //插入
    return x;  //返回删除的元素
}
 

/*--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --
初始化:从最后一个有孩子的节点开始一直到根,对每一个有孩子的节点,
        都在以其为根的子树中寻找合适的位置插入,过程类似于删除
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --*/
void HeapInit(int h[],int cs,int ms)
{
    int i,y,pi;
    CurrSize = cs;  MaxSize = ms;
    for(i = CurrSize/2; i >= 1; i--)
    {
        y = h[i];  //子树的根
        pi = 2*i;  //其左孩子
        while(pi <= CurrSize) //一直往下寻找合适的位置
        {
            if(pi < CurrSize && h[pi] < h[pi+1])
                pi++; //若存在右孩子且右孩子较大,则pi指向右孩子
            //此时pi已指向i的孩子中较大者
            if(y >= h[pi]) break; //y可插入h[i]
            h[pi/2] = h[pi]; //不可插入则上移较大孩子
            pi = pi*2;  //继续往下做比较
        }
        h[pi/2] = y;  //插入
    }
}
 

左高树和哈夫曼树之类的先不写了。

分享到:
评论

相关推荐

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

    《数据结构 1800题》

    《数据结构 1800题》 第一章 绪论 一、选择题 1. 算法的计算量的大小称为计算的(B )。【北京邮电大学2000 二、3 (20/8分)】 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于(C )...

    数据结构习题答案(全部算法)严蔚敏版

    1.1 数据结构的基本概念和术语 1.1.1 引言 1.1.2 数据结构有关概念及术语 1.1.3 数据结构和抽象数据类型(ADT) 1.2 算法描述与分析 1.2.1 什么是算法 1.2.2 算法描述工具——C语言 1.2.3 算法分析技术初步...

    数据结构考研,计算机考研必看

    1. 文件是记录的集合,每个记录由一个或多个数据项组成,因而一个文件可看作由多个记录组成的数据结构。【长沙铁道学院 1998 一、5 (1分)】 2. 倒排文件是对次关键字建立索引。【南京航空航天大学 1997 一、10(1分...

    30.数据结构(C#语言版)高清版

    1.1.1 学习数据结构的必要性...1 1.1.2 基本概念和术语...............1 1.2 算法...4 1.2.1算法的特性............................4 1.2.2算法的评价标准....................5 1.2.3算法的时间复杂度...............

    软件工程专题五:计算机网络知识

     按网络的拓扑结构可分为星形网、环形网、总线网、树形网、完全连接网、交叉环形网以及不规则网。 组成: 计算机网络由计算机硬件、软件、通信设备、通信线路(通信介质)以及数据和信息资源组成。 另外,也可以...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...

    数据结构(C#语言版)

    第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的...

    数据结构02331(苏仕华)

    第五章 树和二叉树 第一节 数的基本概念和术语 第二节 二叉树 第三节 二叉树的运算 第四节 线索二叉树 第五节 树和森林 第六节 哈夫曼树及其应用 第六章 图 第一节 图的定义和基本术语 第二节 图的存储结构 第三节 ...

    3.数据结构(C#语言版)

    第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的...

    数据结构(C#语言版).

    1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性................................................

    【蓝桥杯】必备的java数据结构和常用方法

    串StringString StringBuffer 和 StringBuilder五.树和二叉树六.哈希表七. 图邻接矩阵邻接表 一.线性表 1.顺序表的实现 静态数组 java只有在为数组分配变量时,可以声明数组长度 java:int[] a; a = new int [3];/...

    数据结构(c#语言版)

    第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的...

    数据结构 (C#语言版)

    1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性................................................

    常用数据挖掘算法总结及Python实现

    第六部分 数据结构与算法82 第七部分 SQL 知识.86 第八部分 数据挖掘案例分析87 案例一 A Journey through Titanic 597c770e .87 案例二 Analysis forairplane-crashes-since-190894 案例三 贷款预测问题98 案例四 ...

    XDU数据结构上机.zip

    数据结构上机实验手册 1 实验0 数组、指针和结构体 3 题目一 数据集合的表示及运算 3 题目二 约瑟夫问题 3 题目三 复数运算 4 实验一 链表的实现及运算 4 题目一 单链表基本运算 4 题目二 单链表上的排序运算 6 题目...

    数据结构(C#语言)

    1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性..............................................

    ACM 算法经典代码 数据结构经典代码

    目录 一.数论 4 1.阶乘最后非零位 4 2. 模线性方程(组) 4 3. 素数表 6 4. 素数随机判定(miller_rabin) 6 5. 质因数分解 7 6. 最大公约数欧拉函数 8 ...数据结构: 1.顺序队列 2.顺序栈 3.链表 4.链栈 5.二叉树

    计算机二级C语言考试题预测

    (2) 以下数据结构中不属于线性数据结构的是(C) A. 队列 B. 线性表 C. 二叉树 D. 栈 (3) 在一棵二叉树上第5层的结点数最多是(B) 注:由公式2k-1得 A. 8 B. 16 C. 32 D. 15 (4) 下面描述中,符合结构化程序设计风格的...

Global site tag (gtag.js) - Google Analytics