27.树(上)

数据结构中我们常用的就是树,表,图。我们上几节学的都属于线性表是一对一的线性结构,然后这节我们要开始学习非线性结构树。

在树的学习中我们主要学习二叉树,但是关于树的一些基本概念我们还是都要知道的。

二叉树中我们主要学习几种常用的遍历方式, 中 后序遍历及层次遍历

 

一.树的基本概念

先来点官方套话

树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件 :

有且仅有一个特定的称为根(Root)的节点;

其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树

表示方法 :树形表示法、目录表示法。

说了一大堆,感觉还是没看懂。那就把上面的话忽略直接看图:

 

结点的度数:一个结点子树的个数

终端结点,叶子结点:度数为零的结点

分支结点:度数不为零的节点

内部结点:除根结点外的分支节点

同样还是看图吧,更直接:

数的高度或深度:树中节点层数最大值。

结点的关系

有序树:树中每个节点的各个子树的排列为左到右2,不能交换,及兄弟间是有序的。

森铃:m棵互不相交的树的集合称为森林。

根结点没有前驱节点,叶结点没有后继结点

 

二.二叉树

1.二叉树基本概念

二叉树:由一个根节点以及两棵互不相交的分别称为左子树和右子树组成。

二叉树严格区分左右。

 

满二叉树:

在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有的叶子都在同一层上,脚满二叉树。

完全二叉树

满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树。

完全二叉树不太好理解,但是经常出选择题,我们按照下面规律来选就可以。

按照满二叉树的结构按层次编号,编号不能出现空档,才是完全二叉树。

上面的这些都不是完全二叉树,

 

 

2.二叉树性质

  1. 二叉树第i(i≥1)层上的节点最多为2i-1个
  2. 深度为k(k≥1)的二叉树最多有2k-1个节点。
  3. 满二叉树 :深度为k(k≥1)时有2k-1个节点的二叉树。
  4. 完全二叉树 :只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。具有n个节点的完全二叉树的深度为 (log2n)+1或log2(n+1)

 

 

3.二叉树存储结构

 

二叉树的顺序存储:按照完全二叉树的编号方法从上到下,从左到右,根节点为1号节点进行编号。

当遇到不完全二叉树,需要通过虚节点进行补充,也就导致顺序存储很浪费存储空间。

顺序存储结构一般只用在完全二叉树上。

所以作为理解就好,主要还是用链式存储结构

 

链式结构的定义也是比较好理解

typedef  int  data_t ;
typedef  struct  node_t;
{
    data_t data ;
    struct node_t *lchild ,*rchild ;
} bitree_t ;

 

三.二叉树的遍历

遍历 :沿某条搜索路径周游二叉树,对树中的每一个节点访问一次且仅访问一次。

 

先序遍历:先访问树根,再访问左子树,最后访问右子树

中序遍历:先访问左子树,再访问树根,最后访问右子树

后序遍历:先访问左子树,再访问右子树,最后访问树根

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章