数据结构和算法
阿波罗尼斯圆不是圆
阳光依旧
展开
-
赫夫曼树以及赫夫曼编码
赫夫曼树以及赫夫曼编码赫夫曼树的基本介绍:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。如下图中第二个树才是赫夫曼树,因为它的wpl值最小赫夫曼树的几个重要概念:1)、路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为原创 2020-12-07 18:14:15 · 466 阅读 · 0 评论 -
Java代码实现二叉树前序中序后序层序遍历
Java代码实现二叉树前序中序后序层序遍历Node结点类public class Node { // 左子结点 public Node left; // 右子结点 public Node right; // 结点的值 public String value; public Node(String value) { this.value = value; } @Override public String原创 2020-12-06 15:53:57 · 207 阅读 · 0 评论 -
二叉树的(4种)遍历算法
浅谈二叉树的(4种)遍历算法遍历这棵二叉树无非有以下两种方式层次遍历普通遍历:从上到下从左到右在普通遍历方式中,整个遍历二叉树的过程中,每个节点都被经过了 3 次(虽然叶子节点看似只经过了 2 次,但实际上可以看做是 3 次)。以节点 2 为例,它被经过了 3 次。因此,在编程实现时,我们可以设定真正访问各个节点的时机,换句话说,我们既可以在第一次经过各节点时就执行访问程序,也可以在第二次经过各节点时访问,甚至可以在最后一次经过各节点时访问。这也就引出了以下 3 种遍历二叉树的算法:原创 2020-11-26 17:16:11 · 703 阅读 · 0 评论 -
链表判断是否有环
给定一个链表,给出下列问题该链表是否有环若有环,请找出环的开始处若有环,判断环的大小方法:快慢指针 分别定义一个快指针fast和慢指针slow,快指针一次走两步,慢指针一次走一步。如果链表没有环,那么fast最终会指向null;如果链表有环,那么快指针和慢指针最终会相遇。所以,如果最终fast == null,那么判断链表无环;如果有fast == slow,那么链表有环。证明如下。**1. 第一步:**快慢指针从头结点出发。如下图所示。蓝色表示快指针fast,红色表示慢指针sl原创 2020-09-09 19:43:06 · 121 阅读 · 0 评论 -
动态规划基础
动态规划我们从一道leetcode题目入手,题目198抢钱你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额原创 2020-09-09 15:18:54 · 98 阅读 · 0 评论