随笔分类 - 数据结构算法相关
摘要:恢复内容开始 首先科普一个事实,对于一个满二叉树来说,节点个数=(1<< (高度))-1。 接下来我们看这道题,管他三七二十一,前面那么多树的遍历,直接搞起,可他丫的还有一个限制条件:时间复杂度小于O(n),那就把这条路堵死了,算了算了,先看图分析一下: 我们仔细观察可以发现,完全二叉树的左右子树必
阅读全文
摘要:老规矩,先看定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树 在解释:其实就是和堆一样的,一棵树从上到下从左到右必须要完完整整的按顺序来,描述的不太容易理
阅读全文
摘要:二叉搜索树定义:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 我们来看一下定义:左子树小
阅读全文
摘要:平衡二叉树的定义:平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1,我们可以看下图:左边就不是平衡二叉树,因为3的高度为3而5的高度为1,相差大于1。看右边树最大差别3的高度为2,5的高度为1,最大只相差1,所以为平衡二叉树。 那么我们怎么实现呢? 最简单的做法就
阅读全文
摘要:我们前面写过二叉树的前序,中序,后续遍历算法,今天聊到的前后置节点就是对于中序遍历来说的顺序前后节点,如下图是按中序遍历顺序1-10的节点: 比如3的前置节点为2,后置节点为4,我们先来看看后置节点的算法思想: 我们都知道中序遍历是按照节点左-父-右顺序遍历的,因此一个节点的后置节点只会有两种情况:
阅读全文
摘要:二叉树遍历如下图所示,前序遍历对于1(父),3(左),5(右)这三个节点来说则先1后3,最后5,同理3,4,2这三个也是先父再左再右,那么对于下图来说,前序遍历顺序为1,3,4,5,6,2,7,5,以此类推: 先序遍历:先父,再左,最后右, 中序遍历:先左,再父,最后右 后序遍历:先左,再右,最后父
阅读全文
摘要:看到这道题一开始不知道从何入手,做完这道题有一种感受,那就是二维数组的题其实也没有那么难,用二维数组的两个下标控制需要的点移动就可以了。回到这一题,我们使用双指针去操作,如下图所示: a指针向右移动直到移动至4的位置,向下移动,b指针先向下移动直到移动到9的位置向右移动,这样就可以找到对称点,至于如
阅读全文
摘要:学习堆排之前先学习一下堆得数据结构,我们常用的一般分为小顶堆和大顶堆,我们以大顶堆为例: 上面从左到右分别是数组,数组转成堆得形式,其实就是一个完全二叉树,而最右边这个可以看到每个节点相对所有子节点来说都是最大的,这就是大顶堆,同理,小顶堆反之(这块不理解的可以看我之前写的一篇文章:https://
阅读全文
摘要:最近准备将算法捡起来,感觉又痛苦又很爽,很多时候一个小细节错了要找半天问题,明明思路对了,但是就是和自己想的有一些差别,我想这是很多小伙伴学习的时候都会有的感受吧(绝对不是我太菜了)。 今天研究了一下快排算法,快排的思路其实也不是很复杂,首先尽量找到数组中一个相对居中的数,然后将大的数放在右边,小的
阅读全文
摘要:之前也没有系统的学过数据结构,但是平时用到的数组,链表等还是比较简单的,理解的时候即便没有接触过但是撸一撸源码,看一看画的图,基本上也就会了,树,二叉树,二叉搜索树,平衡二叉树,2-3树(完美平衡二叉树),红黑树。这次主要是在整理Java基本的数据类型Collection和Map子类的时候,发现要想
阅读全文

浙公网安备 33010602011771号