无论是在自考中还是软考中,数据结构导论的部分都是考试的重点。现在我们来整理一下关于数据结构导论中树的知识。
我们还是直奔主题,先说一下树。如下图所示,这就是一个树。说到树,我们就要和图区分开,树是除了根节点没有父节点以外,其余各节点都有且只有一个父节点。而且每个节点有0个或多个子节点。而图就好比一张蜘蛛网,它是四通八达连通开来的。我们今天这篇博客中所介绍的主要有二叉树,判定树,哈夫曼树。
说到二叉树,它较之于树来说,最简单的区别就在于二叉树的任一根节点,其子节点都是不大于2的,其子节点数可以为空。就是二叉树的任一根节点最多只能有两个子节点,最少可以为0个子节点。二叉树有5中形态,分别为空树、只有根节点、右子树为空树、左子树为空树、左右子树都不为空。关于二叉树有三种遍历方式:先序遍历、中序遍历和后序遍历,这个就看根节点的访问顺序就可以了,分别是先访问、中间访问、后访问。下面一张图很好的说明了这三种遍历方式。
这里要区别一下的是满二叉树和完全二叉树。满二叉树就是所有节点(出最下层的子节点外)所有根节点都必须满足有两个子节点,缺一不可,就是满二叉树(可以把满二叉树想象成是满满的二叉树,不能缺少)。而完全二叉树则是按照从上到下、从左至右的顺序编号,一旦往上面加根节点或子树一定是按照从上至下,从左至右的顺序添加。所以,满二叉树一定是完全二叉树,而完全二叉树并不一定是满二叉树。下图中例举了满二叉树和完全二叉树的样图,其中还例举了两个非完全二叉树。
在讲哈夫曼树之前,需要明确几个概念:1、度——(节点的度:该节点所拥有子树的数目)——(树的度:该树中所有节点的度的最大值)。2、深度:具有n个节点的完全二叉树的深度是以2为底,n的对数向下取整(向下取整就是比如3.4,向上取整就是4,向下取整就是3),公式为[log2n]+1。例如一个节点数为3的完全二叉树,其深度就是2。而高度=深度-1。3、权:简单的认定就是根节点上面的值。
而哈夫曼树就是带权路径最短的树。带权路径就是节点到根节点之间的路径长度与节点上权的乘积。所以哈夫曼树有个最明显的特征就是权值越小的节点距离根节点越远,权值越大距离根节点越近。达到权值最小的哈夫曼树就是最优二叉树。