树作为基础的数据结构之一,我将会详细的分析二叉树的实现以及应用。
目录
1.树的基本概念
树是一种非线性的数据结构,有叶子结点以及根结点组成,通过递归定义来实现。
系要注意的是,子树之间不能够有交集,否则就不是树形结构!
像图中所示这些就都不是树形结构,可以称之为图形结构。
2.树的专有名词
节点的度:一个根部结点上所含的子结点上的个数。(例如上图中的A,与偶3 个孩子所以为 度3)
叶结点: 没有孩子的结点。
树的度:树里面结点最大的度。
3.二叉树的概念以及结构
3.1一个根结点下面有左子树和右子树的树叫做二叉树。
3.2 现实生活中的二叉树
3.3特殊的二叉树(ps:考虑的重点)
1.满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 - 1,则它就是满二叉树。
2.完全二叉树:叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。(满二叉树一定是完全二叉树,但是完全二叉树不一定满二叉树。满二叉树是完全二叉树的一种特殊状态)
3.4 二叉树的性质
1. 若规定根节点的层数为1,则一棵非空二叉树的第K层上最多有( -1) 个结点.
2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是- 1 .
3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有 n0=n2+1
4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= . (ps: 是log以2
为底,n+1为对数)
3.5二叉树的练习题
叶子结点就是度为 0 的结点,所以 n0 = n2 + 1; 答案为 B 200;
非完全二叉树他数据储存,不一定是由上到下都是顺序储存的,与根结点, 叶子结点有关。所以答案为 A。
给了总的节点个数,可以设叶子结点的个数为 X,则度为 2 的结点个数为 X - 1(ps:具体可以查看性质3),而在完全二叉树里面的度为 1 的个数通过图片可以判断出,要么为 1,要么为 0;所以 X+X-1 (+1)(+1可有可无) = 2n,所以叶子节点的个数为 N;答案为 A;
完全二叉树最大的节点个数为 - 1(也就是满二叉树) ,最小为 最后一层只有 1 个结点,为
,当将 h = 10带入即可得到范围是 512 --- 1024 此时531刚好在这个范围里面。答案为 B
同样的设叶子结点的个数为 X, 768 / 2 = 384。答案为 B。
3.6二叉树的存储结构
二叉树存储方式有两种:为顺序存储,链式存储。
1.顺序存储
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,二叉树顺
序存储在物理上是一个数组,在逻辑上是一颗二叉树。(原因如图所示)
2.链表储存
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。
4.二叉树的实现
4.1二叉树的顺序结构
对于普通的二叉树,利用数组储存会造成空间浪费,而完全二叉树时可用数组进行储存,我们使用堆(一种二叉树)使用顺序结构来行进行数组的储存。需要明确两个概念大堆、小堆。大堆:根节点最大,孩子结点小于根结点。小堆:根节点最小,他的孩子节点要大于根节点。
4.2堆的概念以及性质
可以通过父节点找到对应的孩子结点,假设父为 i,则左孩子结点为 2i + 1,右孩子结点为 2i + 2;
性质
1.堆中某个节点的值总是不大于或不小于其父节点的值;
2.堆总是一棵完全二叉树。
4.3堆的练习题
题解:就是这样框出进行比较即可。答案为 A,为大堆
要建立初始堆,就需要进行由大到小排序,或者是由小到大排序。答案为 C。
以上是一些简单的基本概念,下一篇文章将会讲解堆的实现。❀❀❀