数据结构与算法
文章平均质量分 67
jinyihao823
这个作者很懒,什么都没留下…
展开
-
基于链表的AVL实现(java)——树结构学习(2)
上一节中介绍并实现了二叉搜索树,它有一个明显缺陷,当按某种顺序插入Node构建的树高度接近N,那么增删查的时间复杂度退化为O(N),AVL可以有效的弥补这方面缺陷,简单来说AVL在每次完成BST的增删操作后,会对树结构进行旋转以维持树的高度在。树的高度以Node为根的树的高度等于Node到每个叶子的最大值,规定null的高度为0,一个Node的高度为1,三个Node组成的满二叉树高度为2,以此类推。//以该Node为根的树高度 public static int getHeight(N原创 2021-08-20 14:42:09 · 145 阅读 · 0 评论 -
基于链表的二叉搜索树实现(java)——树结构学习(1)
在链表实现的二叉搜索树中,对于每一个Node需满足:左子Node < Node <= 右子Node,最好情况下二叉搜索的高度为,此时查找、增加、删除的平均时间复杂度为,最差情况下即按照某种顺序插入Node构建的树高度为N,此时增删查的平均时间复杂度为O(N)。代码分为Node类,二叉树抽象类,二叉搜索树实现类。目录BinaryNode类(简称Node)BinaryTree二叉树抽象类(便于后面扩展)中序遍历BinarySearchTree(继承自BinaryTree).原创 2021-08-13 12:23:53 · 323 阅读 · 0 评论 -
用空间复杂度O(1)的方法实现数组旋转(java)
最近在刷一道leetcode算法时,遇到这么一道题:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数,如何用空间复杂度O(1)方法实现。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99],原创 2021-08-14 23:04:30 · 382 阅读 · 0 评论