树和二叉树(概念 结构)
树的概念和结构
树的概念
树是非线性的数据结构,他是由N个(N>=0)节点组成的一个具有层次关系的集合:
图中表示的都是树。
有一个特殊的结点,称为根结点,根节点没有前驱结点,其余结点被分成M(M>0)个互不相交的集合
节点的度:
叶子节点:
分支节点(非终端节点):
父亲节点:
子节点(孩子节点):
兄弟节点:
树的度:
节点的层次:
树的高度(深度):
节点的祖先(祖先节点):
树的结构
树的结构比较线性表的结构复杂很多,要存储链接起来特别麻烦,要保证数据的存储,也要保证每个结点与结点之间的关系。表示的方法很多,我最了解的也是最简单的方法就是,孩子兄弟表示法。
定义结构:
tupedef int TreeDataType;
struct treenode
{
struct treenode* child; //链接孩子节点
struct treenode* brother;//链接兄弟节点
TreeDataType data;
};
最常见的运用场景就是文件系统的目录树结构
二叉树的概念和结构
二叉树的概念
二叉树是节点一个有限集合,
二叉树的所有节点度不大于2,
二叉树的子树有左右之分,次序不能颠倒,因此二叉树也是有序树
可以为空,也可以是由一个根节点加上两颗左子树和右子树的二叉树组成的。
特殊的二叉树
满二叉树:一个二叉树,每一层的节点都是最大值,那这个二叉树就是满二叉树,满二叉树的节点是2^k-1(K是这颗二叉树的层数)。
完全二叉树:完全二叉树就是满二叉树为满情况下的,需要注意的是每个节点都与深度为K的满二叉树中编号从1至N的节点一一对应。
二叉树的性质
一颗非空的二叉树第i层上最多有2^(i-1)个节点(第一层为1的话)。如果第一层为0,则第i层最多有2^i个节点;
二叉树深度为h的树,最多节点数为2^h - 1(第一层为1)
度为0的节点就是叶子节点,我们称为n0,度为2的节点就是分支节点为n2,度为1的节点为n1,
则叶子节点的个数为 n0 = n2 + 1;
根据观察可以看出n0永远比n2多一个, n1为1或者0;
根节点第一层为1, n个节点的满二叉树的深度为多少, h = log(n+1);(以2为底的logn)
二叉树的储存结构
二叉树一般可以使用两种结构储存,顺序结构和链式结构。
顺序结构:
链式结构: