小编最近和树、二叉树交流甚多,自认为对其很是清晰有条理,突然发现不是这个样子的,尤其被二叉树惹的一塌糊涂,不得已区分总结来给自己缕缕思路。何为树?何为二叉树?两者的联系?区别?小编为何被其所困扰呢?待小编一一道来~~~
树与二叉树
树
一种典型的非线性数据结构,由一个或多个节点组成的有限集合。需要满足两个条件:
1.有一个特定的结点,称为根节点;
2.其余节点分成m(m>=0)个互不相交的有限集合,每个集合又都是一棵树,称为根节点的子树。
二叉树
有限的结点集合,该集合或者为空,或者由一个根节点及其两颗互不相交的左、右二叉子树所组成。
区别
1.树的每个结点可以有多个子结点,即树的度,如下图,A的度为3,B的度为2,没有子结点的结点度为0,称为叶子节点。
二叉树的每个结点的子结点不大于2,非叶子结点有1个或两个子结点。
2.树有三种遍历方式:前序遍历、后序遍历、层次遍历;
二叉树同样有三种遍历方式:前序遍历、中序遍历、后序遍历。
详解二叉树
树与二叉树相信大家都没什么问题,最容易迷惑的还是二叉树,在这几种二叉树之间,小编没少死磕,是时候醒醒了。
满二叉树与完全二叉树
看到标题有没有在大脑里浮现出一张网络图?给大家两分钟时间给自己讲解一遍两者的区别和联系————
小编来说树~~~
满二叉树:二叉树的深度为k,则此二叉树的结点数一定是2^(k-1),其中(k>=1)。(多说一句,二叉树的深度是从1开始的,没有0层滴)。
完全二叉树:深度为k,有n个结点,且此二叉树中各结点能够与深度k的顺序编号的满二叉树从1到n标号的结点相对应。
对其一句话概括就是:满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
二叉查找树
又称为二叉排序树。
特性:在二叉排序树中,左子树上所有的结点的值都小于根结点,右子树上上所有的值都大于根结点;左右子树本身又是一棵二叉排序树。
对二叉排序树进行中序遍历,便可得到一个排好序的结点序列,而且序列是递增的。
平衡二叉树
又称为AVL树,平衡,也就是说树中任一结点的左右子树的高度都大致相同。左子树深度-右子树深度=m,当m=-1、0、1时,二叉树是平衡的,如果m<-1或者m>1,则二叉树是不平衡的。
完全平衡:任一结点的左右子树的高度均相同,满二叉树就是个活生生的例子。
图中,第一棵树:对于根结点,左子树深度为2,右子树深度为1,深度差为1,为平衡二叉树;
第二棵树:对于根结点,左子树深度为0,右子树深度为3,深度差为-3,为非平衡二叉树
哈夫曼树
哈夫曼树构造过程:
分析:从所给的序列中选择两个最小的构成一棵二叉树,然后将所构成二叉树的根结点放入原序列中,继续比较取两个最小值,依次进行,指导所有记录都被添加到二叉树中。
计算带权路径长度:找出原序列的所有记录:2 4 5 7;用记录的键值与根结点到记录所在位置所经的边数相乘,所得结果的和即为带权路径长度。
图中例子的带权路径长度:(2+4)*3+5*2+7=35
总结
二叉树中的知识点有很多相似之处,如不多加注意很容易便会用错,通过这一遍总结,小编对树和二叉树,尤其是各种二叉树又牢牢的巩固了一遍,当然在总结的过程中也对这些树们有了严格的认识。相信下次再遇到这样的问题,小编不会再犯迷糊了~~~