目录
概要
本章主要是简单介绍一下树的基本概念,以及稍微讲讲二叉树的基本概念。
1.树的概念
1.1树
树是一种非线性的数据结构,它是由n(n>=0)个节点组成一个具有层次关系的集合,把他叫做树,是因为它像一颗倒挂的树,也就是根朝上,叶朝下的样子。
一、树有一个特殊的节点,称为根节点,根节点没有前驱节点,意思就是根节点是最上面的节点。
二、除根节点外,其余节点被分成M个互不相交的集合,可以理解为左边又一棵树,右边又有一颗树,每一个集合都是一棵结构与树类似的子树。每棵子树的根节点有且只有一个前驱节点,可以有0个或多个后继节点。
三、树是递归定义的。
注:树不能有交集,否则不是树结构,如图:
1.2树的相关概念
节点的度 一个节点含有的节点个数称为度。
叶子节点 度为0的节点称为叶子节点
分支节点 度不为0的节点。
双亲节点
或父节点 一个节点含有子节点,这个节点称为其子节点的父节点。
子节点 一个节点是该节点的根节点的叶子节点称为子节点
兄弟节点 具有相同的父节点称为兄弟节点
树的度 一颗树中最大的节点的度,称为树的度
节点的层次 从根开始,根为第一层,子节点为第二层
树的高度
或深度 树的节点最大层次
节点的祖先 分支节点以上的都是祖先节点
本章树的概念居多,所以相对其他的章节来说会枯燥很多,但是这些基础概念也是必须掌握的,后面会给大家介绍有关树有趣的知识的。
1.3树的结构表示
兄弟表示法(了解)
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
1.4树在实际中的运用(表示文件系统的目录树结构)
2.二叉树的概念及结构
2.1概念
2.1.1如何判断是否为二叉树
1.树为空
2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
2.1.2二叉树的要求
1.不存在度大于2的节点
2.二叉树的子树有左右之分,次序不能颠倒,二叉树是有序树。
2.2特殊的二叉树
2.2.1满二叉树
二叉树中每一层的节点数都达到最大值
设层数为k,节点总数为 (2^k) - 1
2.2.2完全二叉树
完全二叉树是由满二叉树衍生出的,对最深层k的,前k-1层都是满的,但第k层不一定满,要求也是从左到右必须连续。
2.3二叉树的性质
1.一棵非空二叉树的第 i 层上最多由2^(i-1)个节点
2.深度为 h 的二叉树最大节点数是 2^h - 1 个节点
3.如果度为 0 叶节点个数为 n0个,度为 2 的分支节点个数为 n2 个,那么 n0 = n2 + 1
4.具有n个节点的满二叉树的深度为:h = log2(n+1)
5.当得知子节点求父节点 (i - 1)/ 2
i = 0 时,i为根节点,无双亲
父节点求左、右孩子节点
左:2 i + 1 右:2 i + 2 (要求范围都是 < n,当数范围 > n说明该节点不存在)
小结
本章树重要的基本概念大致讲完,二叉树重点内容我会在下一章会跟大家详细详谈,像前中后序遍历、求节点个数、层数等也会跟大家一起讨论讨论的,期待下一期吧。