IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 树,二叉树,堆,堆排序 --- 数据结构 -> 正文阅读

[数据结构与算法]树,二叉树,堆,堆排序 --- 数据结构

请添加图片描述
这一篇内容拖了非常长都没有写,现在进行书写!

基本概念

请添加图片描述
单一的孩子节点之间没有相交。
节点的度:一个节点含有的子树的个数称为该节点的度;
叶节点或终端节点:度为O的节点称为叶节点;
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
树的度:一棵树中,最大的节点的度称为树的度;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有告点.
子孙:以某节点为根的子树中任一节点都称为该节点的子孙,如上图:所有节点都是A的子孙
森林:由m (m>0)棵互不相交的树的集合称为森林;

表示方法

孩子兄弟表示法。

typedef int DataType;
struct Node
{
struct Node* firstChildl;
struct Node* pNextBrother;
DataType data;
}

二叉树

基本的概念

特殊的一种树的结构。

1,二叉树不存在度大于2度节点
2,有左右之分

请添加图片描述

特殊的二叉树

每一层的节点都到达最大值。

二叉树的性质

基本了解可以了!

1. 若规定根节点的层数为1,则一棵非空二叉树的第识上最多有2^(i - 1)个结点。
2.若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h - 1。
3.对任何一棵二叉树,如果度为0其叶结点个数为 N0,度为2的分支结点个数为 N2,则有N0 = N2 +1。
4.若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=lg(n + 1)。
为底,n+1为对数)
2. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号
3. ,则对
千序号为的结点有:
4. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点
2.若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
5. 若2it2<n,右孩子序号:2it2,2i+2>=n否则无右孩子

二叉树储存结构

顺序储存

利用数组进行储存,只适合完全二叉树。数据储存是数组,逻辑上面是二叉树。

链式结构

暂时不讨论这个!

一个集合完全按照二叉树的方式进行储存,满足子子节点全部大于或者小于父节点,成为大堆或者小堆。

数组建立堆

向下调整建堆,插入数据建立堆

数据不断的增多,是从上到下增多的。时间复杂的为O(N)

void AdjustUp(HeapData *pa,size_t child){
    
    size_t parent = (child -1)/2;
    
    while (parent > 0) {
        
        if (pa[parent]<pa[child]) {
            
            int tmp = pa[child];
            pa[child] = pa[parent];
            pa[parent] = tmp;
            
            child = parent;
            parent = (child - 1)/2;
        }
        else
            break;
    }
}
for(int n  = 0;n < size;n++){
  AdjustUp(a,n);
}

向上调整建堆

从下面的子树进行调整(非叶子节点开始),整个过程都是从父亲节点开始减!
时间复杂度为O(NlgN)
请添加图片描述

for(int n = (size - 1 - 1/2;n >= 0 ;i--){//从第一个父亲节点进行调整。
//第一个子节点为size - 1,利用公式解决问题
  AdjustDown(a,size,n);
}

一个元素从最底层到最高层满足相应的条件。

堆排序

基本概念:利用堆特性进行排序。(然后可以得到一个完整堆安装大小排列数组)!

首先建立堆

升序建大堆,降序建立小堆。

如果升序建立小堆,交换之后堆顺序完全改变了,只有重新建堆了,还不如直接选择最大那一个,
还不用怎么复杂。

建立大堆,只用向下面调整可以了!

升序排序:

选择一个最大堆,然后让最大堆内容节点与最小的哪一个节点交换。然后继续进行堆排序(堆的数量减小1),一直重复上面操作,直到只有一个节点。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:01:27  更:2022-04-22 19:01:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:37:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码