关于树的东西学了已经好几遍了,但每一遍都会有不一样的收获,无论数据结构或者软考,很多地方对树的介绍互相补充,互相完善,时间久了还是会有所遗忘,再次总结以加强学习理解~~~
树与二叉树
树
一种典型的非线性数据结构,由一个或多个节点组成的有限集合。需要满足两个条件:1.有一个特定的结点,称为根节点;
2.其余节点分成m(m>=0)个互不相交的有限集合,每个集合又都是一棵树,称为根节点的子树。
二叉树
有限的结点集合,该集合或者为空,或者由一个根节点及其两颗互不相交的左、右二叉子树所组成。
区别
1.树的每个结点可以有多个子结点,即树的度,没有子结点的结点度为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 4 5 7;用记录的键值与根结点到记录所在位置所经的边数相乘,所得结果的和即为带权路径长度。
图中例子的带权路径长度:(2+4)*3+5*2+7=35
总结
二叉树中的知识点有很多相似之处,如不多加注意很容易便会用错,通过总结,小编对树和二叉树,尤其是各种二叉树又牢牢的巩固了一遍,当然在总结的过程中也对这些树们有了严格的认识。相信下次再遇到这样的问题,小编不会再犯迷糊了~~~