数据结构
奈我何~
拥有好的心态才能有好的状态
展开
-
判断一个链表是否有环
1.思路 思路一:从头节点开始,依次遍历节点中的每一个节点。每次遍历一个新的节点的时候,从头开始重新遍历之前的节点,用新的节点判断是否和之前的节点是否相同,如果相同,则说明该链表有环;如果不相等,继续遍历,直到最后一个节点,若不想等,则说明无环。实现的时间负责复杂度为O(n*n),空间复杂度为O(1) 思路二:创建一个以节点ID为Key的HashSet集合,用来存储遍历过的节点的值,然后从头节点开始,一次遍历链表中的每一个节点的值,每遍历一个节点,就以新节点和存储在HashSet结合中的节点作比较,如果Ha原创 2021-01-31 21:10:12 · 227 阅读 · 4 评论 -
优先队列
1.简介 队列的特点是:先进先出(FIFO),也就是说,入队时,将新的元素置于队尾;出队时,队头元素最先被移出。 优先队列不再遵循先入先出的原则,它分为两种情况: (1)最大优先队列:无论入队顺序如何,都是当前最大的元素优先出队 (2)最小优先队列:无论入队顺序如何,都是当前最小的元素优先出队 二叉堆是实现优先队列得基础,二叉堆中堆节点的“上浮”和“下沉”的时间复杂度都是O(logn),所以优先队列的入队和出队操作的时间复杂度都是O(logn) 2.代码实现 import java.util.A原创 2021-01-30 11:32:37 · 4352 阅读 · 5 评论 -
二叉堆代码实现
文章目录1.简介2.二叉堆的代码实现2.1 构建堆2.2 上浮调整2.3 下沉调整2.4 测试方法 1.简介 二叉堆本质上是一棵完全二叉树,它分为最大堆和最小堆。最大堆就是它里面的任何一个父节点的值,都大于或者等于它的左、右孩子节点的值。最小堆就是其中的任何一个父节点的值都小于或者等于它左、右孩子节点的值。二叉堆中的根节点叫做堆顶,最大堆和最小堆决定了:最大堆的堆顶是整个堆中最大的元素,最小堆的堆顶是整个堆中最小的元素。 2.二叉堆的代码实现 二叉堆虽然是一棵完全二叉树,但是它的存储方式并不是链式存储原创 2021-01-27 16:06:37 · 123 阅读 · 0 评论 -
二叉树的遍历
文章目录1.构建一棵二叉树2.二叉树的遍历2.1递归方式实现2.1.1前序遍历2.1.2中序遍历2.1.3后序遍历2.1.4层序遍历2.2非递归方式实现2.2.1前序遍历2.2.2中序遍历2.2.3后序遍历2.2.4层序遍历 1.构建一棵二叉树 private static class TreeNode{ int data; TreeNode leftChild; TreeNode rightChild; TreeNode(int data){ th原创 2021-01-23 15:08:11 · 213 阅读 · 8 评论