数据结构之树【完善中】

一、树的概念

树是一种分组的层次结构。

树的定义:

树是n(n>=0)个数据元素的集合,在任意一棵非空树中,有如下特征

  1. 有且只有一个根结点(无前驱结点)
  2. 当n>1时,其他结点被分为若干个互不相交集合,并且每个集合又是一棵树

我们可以看到树的定义引用了集合的概念和迭代的概念。

二、树的表示方法

  1. 文氏图
  2. 圆括号
  3. 凹入法
  4. 树形图

三、基本术语

  1. 结点:树的结点包含一个数据元素和若干指向其他子树的分支
  2. 结点的度:结点的子节点的个数
  3. 树的度:树的所有结点的度的最大值
  4. 叶子结点:结点的度为0的结点
  5. 分支结点:结点的度不为0的结点
  6. 兄弟结点:同一个父结点下的子节点称为兄弟结点
  7. 层数:根节点的层数为1,其他结点的层数为父节点的层数加1
  8. 树的深度:所有结点层数的最大值
  9. 森林:零棵或者有限棵互不相交的树称为森林
  10. 有序树和无序数:结点的各子节点从左到右无序(可以互换)的树称之为无序树,否则称为有序树

四、二叉树

1、二叉树的定义

一种特殊的树,除了有树的特征外,还有如下特征:

  1. 当结点数大于0时,该树由根节点和两个子树组成,分别称之为左子树和右子树
  2. 左子树和右子树又是二叉树

2、二叉树的基本操作

  1. CreateTree创建一棵二叉树
  2. ShowTree用凹入法或者圆括号法显示一棵二叉树
  3. PreOrder按照先序(根,左,右)遍历一棵二叉树上的所有结点
  4. InOrder按照中序(左,根,右)遍历一棵二叉树上的所有结点
  5. PostOrder按照后序(左,右,根)遍历一棵二叉树上的所有结点
  6. LevelOrder按层次遍历一棵二叉树上的所有结点
  7. Leafnum求一棵二叉树上的所有叶子结点
  8. TreeDepth求一棵二叉树的深度

3、二叉树的性质

  • 一棵二叉树的第i层至多有2分之i-1个结点
  • 深度为h的一棵二叉树至多有2分之h-1个结点
  • 对于一棵有n个结点的完全二叉树,若按照满二叉树的方式对结点进行编号,对于任意编号为i的结点,有如下性质
  1. i等于1的结点为根结点,当i>1时,该结点的父节点编号为i/2
  2. 当2i<=n时,该结点的左子结点编号为2i,当2i>n时,该结点没有左子节点
  3. 当2i+1<=n时,该结点的右子节点编号为2i+1,当2i+1>n时,该结点没有右子节点
  • 具有n(n>0)个结点的完全二叉树,其深度为floor(log2n)+1,floor表示向下取整
  • 对于一棵非空的二叉树,设结点的度为0,1,2的结点的个数分别为n0,n1,n2,那么有:n0=n2+1

 

你可能感兴趣的:(数据结构)