1.什么是二叉树?介绍各种树?

二叉树:是一种树形结构,其特点是每个结点至多只有两颗子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。

平衡二叉树:树上任意结点的左子树和右子树的深度差不超过1。

满二叉树:一颗二叉树的结点要么是叶子结点要么它有两个子节点。

完全二叉树:若设二叉树的深度为h,除第h层外,其他各层节点数都达到最大个数,第h层结点都连续集中在最左边。

二叉堆:二叉堆是一种特殊的完全二叉树,它满足堆的性质,即父节点的值总是大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。二叉堆常用于实现优先队列等数据结构,可以高效地进行插入、删除最值等操作。

最优二叉树:也叫哈夫曼树,是一种用于数据压缩的二叉树结构。它是通过哈夫曼编码算法生成的,树中的每个叶节点都对应着一个字符,并且叶节点的权重(频率)越高,离根节点的距离越短。哈夫曼树可以实现高效的数据压缩和解压缩。

线索二叉树:线索二叉树是一种对普通二叉树进行改进的数据结构,它的节点除了包含左右子节点的指针外,还包含指向中序遍历的前驱和后继节点的线索。这样可以实现在不使用递归或栈的情况下,高效地遍历二叉树。

二叉搜索树(Binary Search Tree,BST):又称二叉排序树:左子树结点值<根节点值<右子树结点值。二叉搜索树是一种特殊的二叉树,它满足以下性质:对于树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这个性质使得二叉搜索树可以用来高效地进行查找、插入和删除操作。

自平衡二叉搜索树AVL:它通过在插入或删除节点时进行旋转操作来保持树的平衡。AVL树的特点是任何节点的左子树和右子树的高度差不超过1,这使得它具有较快的查找和插入操作的时间复杂度。

红黑树:红黑树是一种特殊的二叉搜索树,它在二叉搜索树的基础上增加了一些性质,以保证树的平衡性。红黑树的性质包括:每个节点要么是红色,要么是黑色;根节点是黑色的;每个叶节点(NIL节点,空节点)是黑色的;不能有相邻的两个红色节点等。

B树:B树是一种平衡多路查找树,广泛用于文件系统和数据库中。它的特点是每个节点可以存储多个关键字和对应的值,并且可以拥有多个子节点。B树通过增加节点的容量和调整树的结构来保持平衡,从而提供高效的数据检索和插入/删除操作。

B+树:B+树是一种平衡的多路查找树,它在数据库和文件系统中被广泛应用。

2.如何构造哈夫曼树?哈夫曼编码的意义是什么?

数据结构——五分钟搞定哈夫曼树,会求WPL值,不会你打我_哔哩哔哩_bilibili

哈夫曼树:带权路径长度(WPL)最小的二叉树。

构造哈夫曼树的算法描述如下:

1)将n个结点分别看作n棵仅含一个结点的二叉树。

2)在所有的根节点中选取两个根节点权值最小的数构造成新的二叉树,再将根节点与其他n-1个根节点进行比较,选出根节点权值最小的两棵树进行归并,重复上述步骤,直至所有结点都归并到一个树上为止。