数据结构-树-树与树的表示

树与树的表示

人类的社会家谱,社会组成结构,图书信息管理。硬盘

静态查找:集合中记录是固定的。没有插入和删除,只有查找。

动态查找:集合中记录是动态变化的。除查找,还可能发生插入和删除

静态查找

就是放在数组里面,当然放链表里面也可以。方法1:顺序查找。

程序设计里面会用到一种技巧,叫做哨兵,建立一个数组,不在第0个位置就存储数据,而在第1个位置存储数据 。

哨兵的作用 :写循环的时候可以少写一个条件。循环是倒过来做的。

优化

方法二:二分查找

我们把元素存到数组里面,要求的前提是必须满足有序,才能进行二分查找。

一直除以2 就是时间复杂度就是  log N

int BinarySearch(StaticTable *Tbl,ElementType K){  //在表中Tbl中查找关键字为K的数据元素。
    int left, right, mid, NoFound = -1;
    left = 1;
    right = Tbl->Length;
    while (left<=right)
    {
        mid = (left + right)/2
        if (K < Tbl->ElementType[mid]) right = mid - 1;
        else if (K > Tbl->ElementType[mid]); left = mid + 1;
        else return mid;
    }
    return NotFound;
}

二分查找的前提,就是排序。

判定树上每个结点需要的查找次数刚好为该结点所在的层数。例如:查找4需要比较三次,查找5号位置需要比较4次,

查找成功时查找次数不会超过判定树的深度  n个结点的判定树的深度为[log2n]+1。

ASL平均查找次数 = (4*4 + 4*3 +2*2 +1*1)//11 = 3

当我们不用数组存储数据,而就把这个存储我们需要的数据,这就是我们的查找树查找树二分查找效率上可以达到一样的效率。但是当在里面插入删除结点,会比数组简单的多。所以的话,以查找树的形式可以很好的解决动态查找的问题。

树的定义

除了根结点,每个结点都有一个往上的一条边,所以一个N个结点的树有N-1条边。结点比边多一条。

有一个m棵树的集合(也叫森林)共有k条边,这m颗树共有多少个结点?   k+m个

树的表示

数组实现 就算了吧。。。

用链表来实现,就要有一个数据结构,但是呢,指针要是最大的指针。结构+链表的形式。

当用链表的时候,按照下面的设计我们要有3n个指针域,但是实际上呢,我们的边只有n-1条,2n+1都是空的,所以呢也不用链表,用什么?下面

儿子-兄弟表示法

这样的表示方法,n个结点有2n个指针域,n-1个利用了,n+1个浪费了。浪费不大。把一般的树,

例:在用“儿子-兄弟”法表示的树中,如果从根结点开始访问其“次子”的“次子”,所经过的结点数与从根结点开始访问其“长子”的“长子”的“长子”的“长子”

旋转45度,这样的树呢,我们叫做二叉树。

时间: 2024-10-25 23:02:01

数据结构-树-树与树的表示的相关文章

白话算法与数据结构之【字典树】

1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高.      Trie的核心思想是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的. Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子

数据结构学习笔记(树、二叉树)

树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2........Tn,其中每一个集合本身又是一棵树,并且称为根的子树. 对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点.2.m>0时,子树的个数没有限制,但它们一定是互不相交的. 结点

【经典数据结构】B树与B+树

本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时

高级数据结构实现——自顶向下伸展树

[0]README 1) 本文部分内容转自 数据结构与算法分析,旨在理解 高级数据结构实现——自顶向下伸展树 的基础知识: 2) 源代码部分思想借鉴了数据结构与算法分析,有一点干货原创代码,for original source code, please visithttps://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter12/p345_topdown_splay_tree 3) you c

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

数据结构第一回合:树

不管是数据结构导论中还是软考中,树都是一个很重要的部分,相对来讲数据结构导论比软考中要讲的相对详细,下面我就结合例题对这部分进行一下整合: 总的来说,结构如下: 概述部分都是一些基本概念和性质的阐释,森林和二叉树都特殊形式的树,判定树和哈弗曼树本质作为树的同时,也可以作为树的应用,运用树(包括二叉树)的基本知识描述和解决一些实际的问题  .下面就依次来看: 一.二叉树 1. [概况] 二叉树有满,完全.非完全三种情况.所谓满二叉树就是一个子结点都不差,所有的位置该有的都有,如图: 这样一个都不缺

数据结构之二分查找树总结

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 二分查找树BST(也叫二叉查找树.二叉排序树)的提出是为了提供查找效率,之所以称为二分查找树,因为该二叉树对应着二分查找算法,查找平均的时间复杂度为o(logn),所以该数据结构的提出是为了提高查找效率. 定义 二分查找树或者是一棵空树,或者具有下列性质: 1.若它的左子树不为空,则左子树上所有结点的值均小于根结点的值: 2.若它的右子树不为空,则右子树上所有结点的值均大于根结点的值: 3.它的左右子树均为二分查找树. 操作 二分查找树的操作主

浅谈算法和数据结构: 九 平衡查找树之红黑树

原文:浅谈算法和数据结构: 九 平衡查找树之红黑树 前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度.但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 定义 红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,

数据结构(六)树

定义 结点分类 结点的关系 森林 m棵互不相交的树的集合 树与线性表结构对比 存储结构 双亲表示法 优先记录每个节点的双亲(双亲是必有的,除了根节点),再针对特殊的需要,增加子节点或兄弟节点,重点在于寻找双亲节点,时间复杂度为O(1) 该方法结合了数组和链表,以数组为基础存储结构,每个元素再用链表的方式记录其双亲节点 孩子表示法 以这棵树为例 把每个结点的孩子结点排列起来(一般是从左往右),以单链表作为存储结构,则n个结点就拥有n个孩子链表,把n个单链表的头指针组成一个数组 用该方法得到的数据结

转 浅谈算法和数据结构: 十 平衡查找树之B树

前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时所经历的中间过程,从而