树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树状图有和树相同的结构,树有根、枝、叶,而树状图也有根——根节点、枝——非叶子节点的子节点、叶——叶子节点。每颗树只会有一个根,枝能衍生出新的枝和叶,而叶是最后的一个部位,同理树状图也一样。
树的常用词:
节点:树中的每个元素都叫节点
权值:节点的值
根节点:树的第一个元素,它没有父节点
父节点:若一个元素含有子节点,则它就是该子节点的父节点
子节点:若一个元素含有父节点,则它就是该父节点的子节点
叶子节点:若一个元素含有父节点,但它没含子节点,那它就是一个叶子节点
子树:若一个元素含有父节点,则该节点和该节点下所有子节点(包括子节点的子节点)组成的一个树就是父节点的子树
森林:由m(m>=0)棵互不相交的树的集合称为森林
树的层级:根节点为第一层,它的子节点为第二层,该子节点的子节点为第三层,以此类推
树的高度或深度:即树的最大层级
路径:从根节点找到某一节点的路线
树的种类
无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
二叉树:每个节点最多含有两个子树的树称为二叉树;
满二叉树:叶节点除外的所有节点均含有两个子树的树被称为满二叉树
完全二叉树:有2^k-1(k:层级)个节点的满二叉树称为完全二叉树
哈夫曼树(最优二叉树):带权路径最短的二叉树称为哈夫曼树或最优二叉树;
树的表达方式图像表达法
即通过图像的方式直接表达出各节点的关系
符号表达法
用括号先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,而对子树也采用同样的方法处理;同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。如上面树状图可以表示为:( A ( B ( C , D ) , E ( F ) ) )
遍历表达法
前序遍历:先输出父节点,再遍历左子树和右子树。如上面树状图用前序遍历表达为:ABCDEF
中序遍历:先遍历左子树,后输出父节点,再遍历右子树。如上面树状图用中序遍历表达为:CBDAEF
后序遍历:先遍历左子树和右子树,再输出父节点。如上面树状图用后序遍历表达为:CDBFEA
为什么要使用树结构?数组结构
优点:通过下标方式来访问数据,速度快。对于有序数组还可以用二分查找等查找算法来加快速度。
缺点:当向数组中插入或删除数据时,数组需要整体移动,效率较低。
链表结构