哈夫曼树与哈夫曼编码及其Java实现
定义给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。从带权路径长度讲起树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和。结点的带权路径长度:结点到树根之间的路径长度与该结...
定义给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。从带权路径长度讲起树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和。结点的带权路径长度:结点到树根之间的路径长度与该结...
介绍AVL树(Adelson-Velsky and Landis Tree)是计算机科学中最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL树得名于它的发明者G. M. Adelson-Ve...
介绍二叉查找树(英语:Binary Search Tree),也称为二叉查找树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查...
介绍层序遍历,顾名思义,不难理解,就是一层一层地遍历Golang实现此处分为递归实现(DFS,深度优先算法)和迭代实现(BFS,广度优先算法)本文以Leetcode102题为例:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/递归实现(DFS)递归实现需要储存每层的级数实现起来主要分为以下几个步骤递归跳出条...
介绍前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。上图的树的前序遍历顺序:1->2->4->5->7->8->3->6->9中序遍历中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。上图的树的前序遍历顺序:4->2->7->5->8->3->9->6后序遍历后序遍历是先遍历左子树...