Java数据结构——树(基本概念)

1、树的定义

树(Tree)是 n(n≥0) 个结点的有限集T,而且当 n>0 时知足下列条件:node

有且仅有一个特定的称为根(Root)的结点;
当 n>1 时,其他结点能够划分为 m(m>0) 个互不相交的有限集T一、T2 、…、Tm,每一个集 Ti(1≤i≤m) 均为树,且称为树T的子树(SubTree)。
特别地,不含任何结点(即n=0)的树,称为空树。spa

以下是一棵树的结构:3d

图1

2、基本术语

根节点(root): 树顶端的节点称之为根节点,也叫树根。blog

子树(subTree): 除根节点以外,其余节点能够分为多个树的集合,叫作子树,如图1中,H这个节点能够称之为一颗子树,而D、H、I三个节点组合起来也能够叫作一颗子树。it

结点(node): 存储数据元素和指向子树的连接,由数据元素和构造数据元素之间关系的引用组成。io

子结点: 树中一个结点的子树的根结点称为这个结点的子结点,如图1中的A的子结点有B、C、Dclass

双亲结点: 树中某个结点有孩子结点(即该结点的度不为0),该结点称为它孩子结点的双亲结点,也叫前驱结点。双亲结点和孩子结点是相互的,如图1中,A的孩子结点是B、C、D,B、C、D的双亲结点是A。二叉树

兄弟结点: 具备相同双亲结点(即同一个前驱)的结点称为兄弟结点,如图1中B、C、D为兄弟结点。终端

堂兄弟节点: 同一层,父节点不一样,或者说双亲节点在同一层的节点称之为堂兄弟节点。如图1的E、F、G、H、I。遍历

叶子结点: 度为0的结点称为叶子结点,也叫终端结点。如图1的E、F、G、H、I

分支结点: 度不为0的结点称为分支结点,也叫非终端结点。如图1的A、B、C、D

节点的祖先: 从根节点到某一节点一路顺下来的除了该节点的全部节点都是该节点的祖先节点。

节点的子孙: 以某节点为根的子树中,任何一个节点都是其子孙,也就是说这个节点下面与这个节点有关的节点都是这个节点的子孙。

结点的度: 结点全部子树的个数称为该结点的度,如图1,A的度为3,B的度为2。

树的度: 树中全部结点的度的最大值称为树的度,如图1的度为3。

结点的层次: 从根结点到树中某结点所经路径的分支数称为该结点的层次。根结点的层次通常为1(也能够本身定义为0),这样,其它结点的层次是其双亲结点的层次加1.

树的深度: 从根节点开始、自顶向下逐层累加(根节点的高度是1)助记:深度从上到下。

树的高度: 从叶节点开始、自底向上逐层累加(叶节点的高度是1)助记:高度由下向上。

有序树和无序树: 树中任意一个结点的各子树按从左到右是有序的,称为有序树,不然称为无序树。

森林: 由m棵不相交的树组成的集合,叫作森林。

数据元素: 具备相同特性的数据元素的集合。

结构关系: 树中数据元素间的结构关系由树的定义肯定。

3、树的类型

常见的树有二叉树、平衡二叉树、二叉查找树、B树、B+树、哈夫曼树、B*树、红黑树和trie树等。

4、基本操做

  1. 建立树IntTree(&T)
  2. 销毁树DestroyTree(&T)
  3. 构造树CreatTree(&T,deinition)
  4. 置空树ClearTree(&T)
  5. 判空树TreeEmpty(T)
  6. 求树的深度TreeDepth(T)
  7. 得到树根Root(T)
  8. 获取结点Value(T,cur_e,&e)
  9. 数据赋值Assign(T,cur_e,value)
  10. 得到双亲Parent(T,cur_e)
  11. 得到最左孩子LeftChild(T,cur_e)
  12. 得到右兄弟RightSibling(T,cur_e)
  13. 插入子树InsertChild(&T,&p,i,c)
  14. 删除子树DeleteChild(&T,&p,i)
  15. 遍历树TraverseTree(T,visit())
相关文章
相关标签/搜索