当前位置:文档之家› 三维数据结构

三维数据结构


完全二叉树的存储结构
一般二叉树的顺序存储 ① 将一般二叉树添上一些 "虚结点",成为"完全二 叉树" ② 为了用结点在向量中的相对位置来表示结点之间 的逻辑关系,按完全二叉树形式给结点编号 ③ 将结点按编号存入向量对应分量,其中"虚结点" 用"∮"表示
优点和缺点 ① 对完全二叉树而言,顺序存储结构既简单 又节省存储空间。 ② 一般的二叉树采用顺序存储结构时,虽然 简单,但易造成存储空间的浪费。 最坏的情况下,一个深度为k且只有k个结点的 右单支树需要2k-1个结点的存储空间。 ③在对顺序存储的二叉树做插入和删除结点操 作时,要大量移动结点。
四、三维GIS数据模型和数据结构 在计算机三维实体造型系统中,常用的形体表示技 术与方法有: (一)单元分解法:即三维GIS的栅格结构。 它以固定形状(如立方体)的单元体规则地分布于空 间网格位置上。一个形体就是这些具有邻接关系的 大量固定单元的集合,单元大小决定了单元分解形 式的精度。 它具有易于存取给定点的优点,能保证空间的 唯一性。缺点是各部分关系不够明确,需要耗费大 量的存储空间。在实际应用中一般采用八叉树(单 元正则形体)或BSP树(单元大小可变形体)的组织形 式。
刚体运动: 三维空间中,把一个几何物体作旋转,平移,及镜像对称 的运动,称之为刚体变换。 刚体运动也可以理解为保持长度,角度,面积等不变的仿 射变换,即保持内积和度量不变。 正则化把非适定问题转化为适定问题的过程。(一个问题 的解是存在的,惟一的和稳定的)
(三)边界表示法:即三维G1S的矢量结构, 一个形体用其拓扑边界表示。它记录形体的几 何元素的几何信息(顶点、边、面、体)以及相 互连接关系(拓扑信息),以便直接存取形体的 各个体与面、面的边界线,以及各个顶点。这 样有利于几实现以体、面、线、点为基础的各 种几何运算和操作,以及查询形体的拓扑信息, 例如实体中有哪几个相连通的部分等等。
一般来说,体域是目标实体的基本构成;认为任何 复杂的实体都是由体域(自然的或人工的)构成的; 体、面、线、点是一个动态的概念,在不同的比例 尺或不同的研究重点时可以相互转换。例如对整个 矿井来讲,巷道可认为是线域,而对某个工作面来 讲,巷道则是体域。按上述思路和观点,考虑保持 拓扑信息的完整性、易扩展性,提出用以下6组关系 来描述矿山GIS三维矢量结构的空间拓扑关系。
完全二叉树的顺序存储 将完全二叉树中所有结点按编号顺序依次存储 在一个向量bt[0..n]中。 其中:bt[1..n]用来存储结点 bt[0]不用或用来存储结点数目。 【例】下表是前述图形所示的完全二叉树的顺序 存储结构,bt[0]为结点数目,b[7]的双亲、左右孩 子分别是bt[3]、bt[l4]和bt[15]。
(1) 复杂地物—体关系:复杂地物与组成它的体域。 在该拓扑关系中加入对复杂地物属性的描述或指向 属性记录文件的指针。
(2) 体—复杂地物—曲面关系:体域与由其所构成 的复杂地物,体域与包围该体域的曲面,以及与该 体域相邻的体域。体拓扑结构中可加入对体域属性 的描述。
完全二叉树结点编号 (1) 编号办法 在一棵n个结点的完全二叉树中,从树根起, 自上层到下层,每层从左至右,给所有结点编号, 能得到一个反映整个二叉树结构的线性序列。
(2) 编号特点 完全二叉树中除最下面一层外,各层都充满了结点。每 一层的结点个数恰好是上一层结点个数的2倍。从一个结点的 编号就可推得其双亲,左、右孩子,兄弟等结点的编号。假设 编号为i的结点是ki(1≤i≤n),则有: ①若i>1,则ki的双亲编号为 ;若i=1,则Ki是根结 点,无双亲。 ②若2i≤n,则Ki的左孩子的编号是2i;否则,Ki无左孩子,即 Ki必定是叶子。因此完全二叉树中编号 的结点必定 是叶结点。 ③若2i+1≤n,则Ki的右孩子的编号是2i+1;否则,Ki无右孩子。 ④若i为奇数且不为1,则Ki的左兄弟的编号是i-1;否则,Ki无 左兄弟。 ⑤若i为偶数且小于n,则Ki的右兄弟的编号是i+1;否则,Ki无 右兄弟。
二叉树存储结构:顺序存储结构和链式存储结构。
1)二叉树的顺序存储结构 二叉树的顺序存储结构由一个一维数组构成,二 叉树上的结点按某种次序分别存入该数组的各个单元。 关键在于结点的存储次序,这种次序应能反映结点之 间的逻辑关系(父子关系),否则二叉树的基本运算 就难以实现。 该方法是把二叉树的所有结点按照一定的线性次序 存储到一片连续的存储单元中。结点在这个序列中 的相互位置还能反映出结点之间的逻辑关系。
1.八叉树:(octree)是一种用于描述三位空间的树 状数据结构。八叉树的每个节点表示一个正方体的 体积元素,每个节点有八个子节点,将八个子节点 所表示的体积元素加在一起就等于父节点的体积。
八叉树的逻辑结构如下: 假设要表示的形体V可以放在一个充分大的正方体C内,C的边 长为2 n,形体V C,它的八叉树可以用以下的递归方法来定 义: 八叉树的每个节点与C的一个子立方体对应,树根与C本身 相对应,如果V=C,那么V的八叉树仅有树根,如果V≠C,则 将C等分为八个子立方体,每个子立方体与树根的一个子节点 相对应。只要某个子立方体不是完全空白或完全为V所占据, 就要被八等分,从而对应的节点也就有了八个子节点。这样的 递归判断、分割一直要进行到节点所对应的立方体或是完全空 白,或是完全为V占据,或是其大小已是预先定义的体素大小, 并且对它与V之交作一定的“舍入”,使体素或认为是空白的, 或认为是V占据的。
带双亲指针的二叉链表 经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针parent,形成一个带双亲 指针的二叉链表。 【例】下面右图是左图所示的二叉树的带双亲指针的二叉 链表。
注意:二叉树存储方法的选择,主要依赖于所要实施的各种运算的频度
(二)构造性表示法 (Constructive Solid Geometry) 它是通过体素(如正方体、球体、三角体等) 定义运算而得到新的形体的一种表示方法。 最著名的构造性表示法是构造实体几何(CSG) 法。CSG的体素本身是实体,其运算为刚体运 动或正则化的集合运算—并、交、差。该法 比较适用于机械、建筑等领域。
二叉树的五种基本形态 二叉树可以是空集;根可以有空的左子树或右子树; 或者左、右子树皆为空。 二叉树的五种基本形态如下图所示。
满二叉树、完全二叉树和不完全二叉树 满二叉树(FullBinaryTree) 一棵深度为k且有2k-1个结点的二又树称为满二叉树。 特点:(1)每一层上的结点数都达到最大值。即对给定的 高度,它是具有最多结点数的二叉树。(2)满二叉树中不存 在度数为1的结点,每个分支结点均有两棵高度相同的子树, 且树叶都在最下一层上。 完全二叉树(Complete BinaryTree) 若一棵二叉树至多只有最下面的两层上结点的度数可以小 于2,并且最下一层上的结点都集中在该层最左边的若干位置 上,则此二叉树称为完全二叉树。 特点:(1)满二叉树是完全二叉树,完全二叉树不一定是 满二叉树。(2)在满二叉树的最下一层上,从最右边开始连 续删去若干结点后得到的二叉树仍然是一棵完全二叉树。(3) 在完全二叉树中,若某个结点没有左孩子,则它一定没有右孩 子,即该结点必是叶结点。 非完全二叉树(Non-Complete BinaryTree)
八叉树的存贮结构 常规八叉树 线性八叉树 一对八的八叉树
1)规则八叉树 规则八叉树的存贮结构用一个有九个字段的记录来表示树 中的每个结点。其中一个字段用来描述该结点的特性(在目前 假定下,只要描述它是灰、白、黑三类结点中哪一类即可), 其余的八个字段用来作为存放指向其八个子结点的指针。这是 最普遍使用的表示树形数据的存贮结构方式。 规则八叉树缺陷较多,最大的问题是指针占用了大量的空 间。假定每个指针要用两个字节表示,而结点的描述用一个字 节,那么存放指针要占总的存贮量的94%。因此,这种方法虽 然十分自然,容易掌握,但在存贮空间的使用率方面不很理想。
【例】下面左图所示二叉树的二叉链表如下面中图所示。
注意:① 一个二叉链表由根指针root惟一确定。若二叉树为空,则 root=NULL;若结点的某个孩子不存在,则相应的指针为空。 ② 具有n个结点的二叉链表中,共有2n个指针域。其中只有n-1个用来指 示结点的左、右孩子,其余的n+1个指针域为空。
节点: 灰节点:它对应的立方体部分地为V所占据; 白节点:它所对应的立方体中无V的内容; 黑节点:它所对应的立方体全为V所占据。 白节点和黑节点又称为叶结点。形体V关于C的八叉 树的逻辑结构是一颗树,其上的节点要么是叶节点, 要么就是有八个子节点的灰节点。根节点与C相对应, 其它节点与C的某个子立方体相对应。
三维GIS矢量数据结构的拓扑关系:
拓扑关系的建立使得各种空间的操作与信息查 询易于实现。然而三维GIS中的三维拓扑关系建立 是一个棘手的问题,因为所研究目标的结构极其复 杂和不规则。从侧重于矿山实际应用的三维GIS研 究出发,认为,复杂地物可用充满空间的各种体域、 组成体域的曲面、构成曲面的边界环、组成环的弧、 弧上的结点来描述。
2)二叉树的链式存储结构
结点的结构 二叉树的每个结点最多有两个孩子。用链接方式存储二 叉树时,每个结点除了存储结点本身的数据外,还应设置两 个指针域lchild和rchild,分别指向该结点的左孩子和右孩 子。
二叉链表(二叉树的常用链式存储结构) 在一棵二叉树中,所有类型为BinTNode的结点,再加上 一个指向开始结点(即根结点)的BinTree型头指针(即根指 针)root,就构成了二叉树ห้องสมุดไป่ตู้链式存储结构,并将其称为二 叉链表
3)一对八式的八叉树 一个非叶结点有八个子结点,为了确定起见,将它们分别 标记为0,1,2,3,4,5,6,7。从上面的介绍可以看到, 如果一个记录与一个结点相对应,那么在这个记录中描述的 是这个结点的八个子结点的特性值。而指针给出的则是该八 个子结点所对应记录的存放处,而且还隐含地假定了这些子 结点记录存放的次序。也就是说,即使某个记录是不必要的 (例如,该结点已是叶结点),那么相应的存贮位置也必须空 闲在那里,以保证不会错误地存取到其它同辈结点的记录。 这样当然会有一定的浪费,除非它是完全的八叉树,即所有 的叶结点均在同一层次出现,而在该层次之上的所有层中的 结点均为非叶结点。
相关主题