树的定义和基本概念

数的定义

计算机世界的树是从自然界实际的树抽象而来的,指的是n个有父子关系的节点组成的有限集合。

树的递归定义:

树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:

  1. 有且仅有一个特定的称为根(Root)的结点;
  2. 其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。

    注意:

    树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。

常用术语

  1. 节点的度(degree):一个节点含有的子树的个数称为该节点的度;
  2. 树的度:一棵树中,最大的节点的度称为树的度;
  3. 叶节点终端节点:度为零的节点;
  4. 非终端节点分支节点:度不为零的节点;
  5. 父亲节点父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
  6. 孩子节点子节点:一个节点含有的子树的根节点称为该节点的子节点;
  7. 兄弟节点:具有相同父节点的节点互称为兄弟节点;
  8. 节点的层次(level):从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  9. 树的高度深度:树中节点的最大层次;
  10. 堂兄弟节点:父节点在同一层的节点互为堂兄弟;
  11. 节点的祖先:从根到该节点所经分支上的所有节点;
  12. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
  13. 森林:由m(m>=0)棵互不相交的树的集合称为森林;

树的种类

  • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;
  • 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
    • 二叉树:每个节点最多含有两个子树的树称为二叉树;

      • 完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
      • 满二叉树:对于上述的完全二叉树,如果去掉其第d层的所有节点,那么剩下的部分就构成一个满二叉树(此时该满二叉树的深度为d-1);
    • 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;

树的基本操作

  • 初始化:通常是一个构造器,用户构建一个空的树,或者以指定节点为根来构建树
  • 为指定节点添加子节点
  • 判断树是否为空
  • 获取根节点
  • 获取指定节点(非根节点)的父节点
  • 获取指定节点(非叶子节点)的所有叶子节点
  • 获取树的深度
  • 输出树
  • 删除子树
  • 遍历树

树的存储方法

  • 父节点表示法:每个子节点都记录它的父节点
  • 每个非叶子节点通过一个链表来记录它所有的子节点

下一节通过具体的Java程序来实现这两种存储。

树的定义和基本概念

时间: 2024-10-09 23:37:28

树的定义和基本概念的相关文章

数据结构--树(定义与存储结构)

树基本定义 树的定义 数是具有n个节点的有限集.如图即是一个树形结构. 节点分类 节点的度:一个节点拥有的子节点即成为节点的度,比如A节点,有B和C两个子节点,那么A节点的度=2. 叶节点(终端节点):没有子节点的节点,比如G.H.I.... 如图: 节点间关系 孩子节点:某一个节点的子节点称为孩子节点.比如B.C节点是A节点的孩子节点. 双亲节点:与孩子节点相反.比如,A节点是B.C的双亲节点. 兄弟节点:同一个双亲节点的孩子节点,之间称为兄弟节点.比如,B.C为兄弟节点. 如图: 树的存储结

树的定义及术语

树的定义及术语 flyfish 2015-7-9 树是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树中: 1)有且仅有一个特定的称为根(Root)的结点 2)当 n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2.-.Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree) 树的结点包含一个数据元素以及若干指向其子树的分支. 结点拥有的子树数目称为结点的度. 度为0的结点称为叶结点或终端结点:度不为0的结点称为非终端结点或分支结点. 除根结点

【数据结构】树与二叉树的基本概念

1. 树的定义与抽象数据类型 (1) 树的定义 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中: 有且仅有一个特定的称为根(root)的结点: 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2.…….Tm,其中每一个集合本身又是一棵树,并且称为根的子树(subTree). 需要注意的是: n>0时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混为一起,现实中的树有很多根须,那是真实的树,数据结构中的树是只能有一个根结点:

树的定义及其分类

树的定义 树和图一样都是非线性结构,树是n个结点的有限集合,当n=0时,称这棵树为空树. 非空树有以下特征: 有且仅有一个称为根的结点. 如果n>1, 除根结点以外其它结点可以分为m(m>0)个不相交的集合T1,T2,T3,T4,......,Tm,其中每一个集合都是一棵树.树T1, T2, T3,......,Tm称为这棵对的子树. 下图就是一棵普通的树: 相关术语 节点:树是由有限个元素组成的集合,每人元素都称作一个节点,上图A.B. C. D. E. F.G.H.I等都是树的节点; 节点

从AVL树的定义出发,一步步推导出旋转的方案。

本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的.文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时候要注重推导的过程.在此,我要特别感谢下我的数据结构老师,是他让我意识到思考的重要性. 一.从AVL树的定义开始 1. 二叉查找树的问题 二叉查找树的出现,虽然使查找的平均时间降到了logN,但是,在多次删除或者插入操作后,可能会出现根节点的左子树比右子树高很多,或者右子树比左子树高很多的情况.如图

数据结构(十七)树的定义与存储结构

一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2....Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree). 2.结点分类:树的结点包含一个数据元素及若干指向其子树的分支.结点拥有的子树数称为结点的度(Degree).度为0的结点称为叶结点(Leaf)或终端结点:度不为0的结点称为非终端结点或分

第五十一课 树的定义与操作

树的定义是递归的,与树的相关算法也是递归的. 如果我们定义一个数组,这个数组中的每一个元素是一棵树,那么这个数组就构成了一个森林. 树节点里面有指向父节点的指针,对于工程实践来说非常有帮助. 添加TreeNode.h文件: 1 #ifndef TREENODE_H 2 #define TREENODE_H 3 4 #include "Object.h" 5 6 namespace DTLib 7 { 8 9 template < typename T > 10 class

树的定义与存储

树的定义 树(tree):n(n>=0)个节点的有限集T. n=0 则称为空树. 当n>0时,有且仅有一个特定的节点,称为树的根(root). 当n>1时,其余节点可分为m(m>=0)个互不相交的有限集T1,T2,..Tm,其中每一个和本身又是一棵树,称为跟的子树(subtree). ① ╱ │ ╲ ② ④ ③ 树与非树识别 除了根节点外,每个节点有且仅有一个父节点. 一个N个节点的树,共有N-1条边. 树的基本术语 结点(node)--表示树中的元素,包含数据元素及若干指向其子树

【数据结构】线段树 (定义 &amp; 点修改/区间查询)

[本文描述高级数据结构线段树的定义] [并解决 点修改/区间查询 的问题] 结构与定义 线段树的基本结构 ? 由图可知,线段树的每一个节点都代表着一段区间 且同一层的节点(深度相同的节点)所表示的区间互不重叠 所有叶子节点代表的区间左边界与右边界相同(叶子节点代表单个元素) 普遍规定 如果某个非叶子节点代表的区间包含元素个数为奇数 则它的左儿子包含的元素个数比右儿子大 1 在代码部分,非叶子节点表示区间为 [l,r] 则左儿子为 [ l , (l+r)/2 ] ,右儿子为 [ (l+r)/2+1