| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法与数据结构 --- 树和二叉树的定义 -> 正文阅读 |
|
[数据结构与算法]算法与数据结构 --- 树和二叉树的定义 |
第一部分 --- 树的定义1.线性结构中的每一个元素都有唯一的前驱和唯一的后继(除头元素和尾元素) 2.非线性结构中的树形结构中的元素则是具有唯一前驱和多个后继(同样除头和尾),图形结构中的元素则是具有多个前驱和多个后继 ? ? ? 第二部分 --- 树的基本术语?1.上面这个树中的每个圆球称为结点,其中前驱为0的结点称为根结点,每个结点的后继个数称为这个结点的度,其中树的度指的是所有结点的度中的最大值 2.根结点之外的具有分支的结点称为内部结点(非终端结点) 3.度等于0的结点称为叶子(终端结点) 4.关于孩子和双亲的例子:比如A结点的孩子就是B,C,D,而B,C,D的双亲就是A结点 5.处于同一层且具有相同的双亲的结点之间称为兄弟,处于同一层但是没有相同的双亲的结点之间称为堂兄弟 6.从树的根到某结点所经过的所有结点都是这个结点的祖先,比如E结点的祖先就是A,B结点 结点的子孙就是以这个结点为根结点的树中的任意结点都是这个结点的子孙 7.树的深度和度不同,树的深度是树中的结点的最大层数,树的度是树的所有结点的度中的最大值 1.所谓有序就是指如果树中的结点的子树的顺序发生变化的话就成为了另一颗树,无序就是指子树的顺序无论发生什么变化都是同一颗树 比如上面这个树,如果无论我们怎么变化T1,T2和T3这三棵子树的位置,原来的树都不发生改变,则称这棵树为无序树,反之若发生变化后就变为了另一颗树的话,就称为有序树 ?1.树是森林的特例,所以树是森林,但森林不一定是树(我是人类的一个特例,我一定是人类,但人类不一定是我) 第三部分 --- 二叉树的定义1.所有的树都可以转化为唯一对应的二叉树,而二叉树的结构简单,规律性强,且相关算法容易实现,当遇到复杂的树的时候我们可以吧=把它们转化为唯一对应的二叉树来处理,所以研究二叉树的相关性质是非常有必要的。 1.二叉树是有序树,二叉树的根结点的孩子分别是左子树和右子树,这两个树的顺序如果对调的话我们就会得到另一颗树 1.二叉树不等于树。二叉树是有序树,有序树中哪怕结点只有一个孩子(即只有一颗子树),我们也要区分这这棵子树是左子树还是右子树,而在树中则不需要这么做。 ? 1.尽管树和二叉树不同,但是树的基本术语依然可以用在二叉树上 (等长编码是很浪费空间的,比如采用等长编码给a编码为01,b编码为00,其中a出现了1次,b出现了1000次,此时a和b占据的总编码长度为 1* 2 + 1000*2 = 2002,但当我们采用非等长编码的时候 --- a:111,b:0,二者的出现次数和上面一样时,总编码长度为:3*1+1*1000 = 1003,这样就节省了非常多的空间) 使用非等长编码的话我们可以给出现次数多的数据短编码,以减短编码长度,对于从出现少的数据长编码,使其容易被找到,减少被“淹没”的可能 第四部分 --- 树和二叉树的抽象数据类型定义? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/28 18:27:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |