树和二叉树详解【数据结构】

 学习树与二叉树看着一篇就够了!!!大家如果喜欢记得收藏,点赞吖!!!

 树的一些基本概念及解释:

树的定义:树是指由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层的至多有m^{i-1}个结点(i>=1)

举例:比如一棵树的度为3,那么第3层的结点的最大个数?

我们首先通过题目知道度为3,那么我们就知道这棵树每一个结点的最多有3个子结点,那么我们就可以通过画图知道这颗数第三层的最多的结点数:

 通过上图我们就知道这棵树第三层的最多结点数为9个结点,那么我们通过性质4来算一下:

3^{3-1}=9,和我们画出的结果相同!!!


二叉树概念、性质和三种遍历方法:

二叉树的定义:二叉树也是一种树形结构,二叉树每个结点至多有2个子结点(即每个结点度数<=2)

 注意:

1.二叉树的子树有左右之分,并且次序不能颠倒

2.当二叉树的结点数为0时,叫做空二叉树

3.当结点数大于等于1的时候,二叉树由根结点和互不相交左子树和右子树构成,左子树和右子树分别是一颗二叉树

那我们看一下二叉树长什么样子:

 由上图可以分析出每一个结点的子结点都是小于等于2的,并且每一个结点的左右子树是分左右的,而且次序不能颠倒!!!


 引申:

1.满二叉树:通俗理解就是每一层都达到了最大的结点数,其中叶子结点只分部在最下层

如图:

2. 完全二叉树:深度为K的一个二叉树是某一个深度为K的二叉树的一部分(或全部),那么该二叉树为完全二叉树。

如图1:

 图2:

 二叉树的性质:

1.非空二叉树的叶子结点数=度为2的结点个数+1

2.非空二叉树的第K层至多有2^{k-1}个结点

3.深度为K的非空二叉树的结点数=2^{K}-1

4.具有N个结点的完全二叉树的深度为(log_{2}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


 都看到这了,大家记得三连吖

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT~郑小菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值