学习树与二叉树看着一篇就够了!!!大家如果喜欢记得收藏,点赞吖!!!![](https://img-blog.csdnimg.cn/80b0030c9c4b4ddb85e361bbd8bd4375.png)
![](https://img-blog.csdnimg.cn/24f2b49970134585854bbccef276282f.png)
![](https://img-blog.csdnimg.cn/a91014aa96404e4580678079ffb24f90.png)
树的一些基本概念及解释:
树的定义:树是指由N个有限节点组成具有层次结构的集合,是一种简单的非线性结构,当N等于0的时候为空树。
首先我们先看树的样子:
我们看上图,形象一点它长得像不像一颗树的树根 ,同时它是一层一层的,很明显具有层次结构。
什么是节点?
节点在上图通俗一点说就是那些圆圈,一个圆圈就是一个节点。当节点数为0的时候那么它就是一颗空树!
接下来我们就开始讲一下这棵树的详细概念吧!
1.根结点:在树结构当中当前仅有一个结点没有父结点(没有前件),那么我们称为根结点,比如上图当中的A结点
2.父结点:在树结构当中每一个结点(除根结点)只有一个前件,那么这个前件就称为这个节点的父结点,比如A结点是B,C,D结点的父结点
3.子结点:在树结构当中每一个结点都有0个或者多的后件(子节点),而这些后件就被称为这个结点的子结点,比如B结点就是A结点的子结点等等
4.叶子结点:在树结构当中没有后件的结点被称为叶子结点,比如上图的J,K,L,M
5.度:树中某一个结点的子结点的个数,为该结点的度,树中某一个结点的最大度数为该树的度,比如上图B结点的度数为3,D结点的度数为2等等,该树的度数为3
6.树的深度:树的深度其实就是它的层数,比如上面那棵树的深度为4,因为有4层(从上往下数)
7.子树:在树当中,以某一个结点的子结点为根结点构成的树,为这个结点的子树
解释7:我们选取结点A,那么我们按照定义的内容,那么下图:
它就是结点A的一颗子树,以A结点的子结点B为根结点的一颗子树!
当我们阅读完上面的内容,我们就能看出,它的结点的名称并不是唯一的,某一个结点可能是一个子结点的父结点,也可能同时它还是一个父结点的子结点等等。当我们熟悉的时候就可以灵活的运用了。
树的一些基本性质:
1.总分支数=1*N1+2*N2+3*N3........n*N
n;其中1,2,3,4.......n其实就是结点的度数,而N1,N2....Nn分别为度数为1,2......n的结点个数,比如某一棵树有多个结点,有的结点度数为1,有的结点度数为2,那么总分支数就等于,度数为1乘以度数为1的结点个数加上度数为2乘以度数为2的结点个数。
2.总结点数=N1+N2+N3.....+Nn;其中N1,N2.....和第一条性质一样,是结点的度数分别为1,2......所对应的结点个数,可以参考性质1的比如。
3.树中的结点数等于所有结点的结点度数之和加1.
4.度为m的树中,第i层的至多有
个结点(i>=1)
举例:比如一棵树的度为3,那么第3层的结点的最大个数?
我们首先通过题目知道度为3,那么我们就知道这棵树每一个结点的最多有3个子结点,那么我们就可以通过画图知道这颗数第三层的最多的结点数:
通过上图我们就知道这棵树第三层的最多结点数为9个结点,那么我们通过性质4来算一下:
=9,和我们画出的结果相同!!!
二叉树概念、性质和三种遍历方法:
二叉树的定义:二叉树也是一种树形结构,二叉树每个结点至多有2个子结点(即每个结点度数<=2)
注意:
1.二叉树的子树有左右之分,并且次序不能颠倒
2.当二叉树的结点数为0时,叫做空二叉树
3.当结点数大于等于1的时候,二叉树由根结点和互不相交左子树和右子树构成,左子树和右子树分别是一颗二叉树
那我们看一下二叉树长什么样子:
由上图可以分析出每一个结点的子结点都是小于等于2的,并且每一个结点的左右子树是分左右的,而且次序不能颠倒!!!
引申:
1.满二叉树:通俗理解就是每一层都达到了最大的结点数,其中叶子结点只分部在最下层
如图:
2. 完全二叉树:深度为K的一个二叉树是某一个深度为K的二叉树的一部分(或全部),那么该二叉树为完全二叉树。
如图1:
图2:
二叉树的性质:
1.非空二叉树的叶子结点数=度为2的结点个数+1
2.非空二叉树的第K层至多有
个结点
3.深度为K的非空二叉树的结点数=
-1
4.具有N个结点的完全二叉树的深度为(
N)+1
具体验证小编就不算了,大家想验证可以画一个思考一下就明白了!!!
二叉树的储存方式
顺序储存:用一组连续的储存单元来储存二叉树的结点元素,一般的储存方式为自左向右,自上而下储存。
链式储存:二叉树的链式储存结构是用一个链表来储存一颗二叉树,二叉树的每一个结点用链表的链结点来储存
比如下图的链式储存方式:
接下来就讲我们的重点:
二叉树的三种遍历:
1.前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树
2.中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树
3.后序遍历:先遍历左子树,然后遍历右子树,最后遍历根结点
前序遍历:首先是遍历根结点A,然后看左子树,我们便找左子树的根结点B,然后看B的左子树,发现B没有左子树,那么我们看右子树,遍历B的右子树的根结点D,然后遍历G,发现子树D没有右子树,这个时候A的左子树遍历完了,然后是右子树C,同理我们遍历后的结果为CEHIFJK
最后结果为ABDGCEHIJK
中序遍历:首先我们先看结点A的左子树B,发现结点B没有左子树,这个时候就遍历B,然后看右子树D,发现结点D有左子树,这个时候看G,然后看G没有左子树,那么就遍历G,然后看G也没有右子树,然后遍历子树根节点D,这个时候A的左子树就遍历完了,我们就遍历根节点A,接下来就看A的右子树C,同理我们就得出了HEICJFK
最后结果为:BGDAHEICJFK
后序遍历:首先我们先A的左子树B,我们发现B没有左子树,然后看B的右子树D,发现D有左子树G,但G没有左右子树,所以遍历G,然后看D没有右子树,所以遍历D,然后遍历子树根结点B,同理我们看A的右子树C,同理我们就依次得到HIEJKFCA
最后结果为:GDBHIEJKFCA
都看到这了,大家记得三连吖