目录
1、树的概念
树是一种非线性的数据结构,它是由N个有限结点组成一个具有层次关系的集合。
因为该结构像一棵倒挂的树,所以称为树。
注意:在树形结构种,子树之间不能有交集。
2、树的相关概念
这里只列举一些常用的概念,其它大家可以自行查找。
1)节点的度:一个节点含有的子树的个数称为节点的度。
2)叶节点:度为0的节点称为叶节点。
3)父节点:若一个节点含有子节点,则这个节点称为父节点。
4)子节点:一个节点含有的子树的根节点称为该节点的子节点。
5)树的度:一棵树中,最大节点的度称为树的度。
6)节的层次:从根开始定义起,根为第一层,根的子节点为第二层,依次类推。
7)树的高度:树中最大节点的层次。
3、树的表示
方式一:假设说明了数的度为N
struct TreeNode
{
int data;
struct TreeNode* subs[N];
};
缺点:
1、可能存在空间浪费。最大的度用完了,其它的度没有用完
2、没有限定树的度就比较麻烦。
方式二:双亲表示法:结构数组存储
一个存储数据,另一个存储父亲的下标。
struct TreeNode
{
int parenti;
int data;
};
struct TreeNode arr[10];
A没有父亲节点,默认为-1,B的父亲是A,A的数组下标是0,C的父亲节点是A,A的数组下标是0,D的父亲节点是B,B的数组下标是1。
方式三:左孩子,右兄弟,最优表示法。
typedef int DataType;
struct Node
{
struct Node* _firstchildl;
struct Node* _pNextbrother;
DataType _data;
};
4、二叉树
概念:度最大为2的树。
如下图所示:
1)满二叉树:
一个二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是满二叉树。
特点:
1、所有的叶子节点都在最后一层。
2、所有的分支节点都有两个孩子。
3、假设树的高度是h的满二叉树,总共有2^h-1个节点。
一颗满二叉树