数据结构---树的基本概念和性质

树的概念

树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

1、·每个节点有零个或多个子节点;

2、·没有父节点的节点称为根节点;

3、·每一个非根节点有且只有一个父节点

4、除了根节点外,每个子节点可以分为多个不相交的子树。

树的术语

1、·节点的度:一个节点含有的子树的个数称为该节点的度;

2、·树的度:一棵树中,最大的节点的度称为树的度;

3、·叶节点或终端节点:度为零的节点;

4、·父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;

5、·孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;

6、·兄弟节点:具有相同父节点的节点互称为兄弟节点;

7、·节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

8、·树的高度或深度:树中节点的最大层次;

9、·堂兄弟节点父节点在同一层的节点互为堂兄弟;

10、·节点的祖先:从根到该节点所经分支上的所有节点;

11、·子孙:以某节点为根的子树中任一节点都称为该节点的子孙;

12、·森林:由m(m>=0)棵互不相交的树的集合称为森林。

树的种类

1、·无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;

2、·有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;

3、二叉树:每个节点最多含有两个子树的树称为二叉树;

4、完全二叉树:对于一棵二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值(即子节点数目为2),且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;

5、平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;

6、排序二叉树(二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树;

7、霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;

8、B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。

树的存储与表示

线性表有两种存储方式:顺序存储和链式存储。二叉树的存储也是一个线性表结构,因此也具有顺序存储和链式存储两种方式。

顺序存储:顺序存储是一个让人又爱又恨的玩意儿。爱是因为它理解起来比较简单,查找起来也比较方便;恨是因为这玩意儿太傻瓜,它只一次性地向内存索取一段连续的空间,而且坚决不管在实际应用中够用不够用,而且这货在插入和删除元素时居然需要O(n**2)的时间复杂度,这个让人有点无语。将数据结构存储在固定的数组中,虽然在遍历速度上有一定的优势,但因所占空间比较大,是非主流二叉树,二叉树通常以链式存储。

目前看来,二叉树的顺序存储看起来还过得去,它在存储空间上的劣势并没有太大的体现,那么现在来演示一下万恶的退化二叉树的顺序存储,来看一下在这种情况下对于内存空间的浪费是多么的可怕!(纯属洗脑)

比如说,我有一棵一般二叉树,这棵二叉树只有三个结点(A/B/C),由于计划生育做的比较好,ABC节点都只有一个孩子,A拥有右子树B,B拥有左子树C。但是为了能够方便地从双亲找到孩子(或者从孩子找到双亲),就需要构建一些“虚结点”,从而使得一般二叉树“虚化”为完全二叉树,如图1所示,A的左子树这一脉就都是虚结点,然后按照完全二叉树的顺序存储方式进行存储,存储结果如图2所示,顺序存储的数组中虚节点均为空,虽然为空,但是还不得不给它留位置。可以看出,对于一般二叉树,如果虚结点过多的话,数组中会有很多的空值,贼浪费空间,这是非常让人无法忍受的!

图1
图2

链式存储:链式存储的结构分为两种:二叉链表结构和三叉链表结构我们着重介绍一下二叉链表

二叉链表结构:一个二叉链表结点由三部分组成:数据域,左孩子指针和右孩子指针,如下图所示。

其中,数据域data用来存放结点信息,左孩子指针lchild用来指向该结点的左子树,右孩子指针rchild用来指向该结点的右子树。图3(a)所示的完全二叉树的二叉链表结构如图3(b)所示。

左图3(a)、右图3(b)

顺序存储与链式存储比较

(a)顺序存储分配的内存空间大小是固定的,不好根据二叉树结点数目的增多而动态扩展。如果内存空间分配过大,势必造成内存空间的浪费;如果分配过小,则会产生数组溢出的问题。另外,顺序存储在增加和删除结点时时间复杂度为O(n^2)。顺序存储的好处是方便查找结点。

(b)链式存储可以动态分配内存空间,比顺序存储更加灵活、方便,结点的最大数目仅与系统存储空间相关。另外,在插入/删除结点时的时间复杂度仅为O(n)。因此,在对二叉树操作时更多采用链式存储结构。

常见的一些树的应用场景

1、.xml,html等,那么编写这些东西的解析器的时候,不可避免用到树

2、.路由协议就是使用了树的算法

3、.mysql数据库索引

4、.文件系统的目录结构

5、.所以很多经典的AI算法其实都是树搜索,此外机器学习中的decision tree也是树结构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容