五分钟玩转面试考点-数据结构-目录

1. 链表

1.1 五分钟玩转面试考点-数据结构-单链表反转(化整为零分析法)
总结下:这篇应该是基础,对链表的操作,其实是采用了化整为零的思维方式,同时也熟悉了节点这一概念。

1.2 五分钟玩转面试考点-数据结构-合并链表(递归萌芽3-调用者模式)
总结下:这篇是两个有序链表合并为一个有序链表的问题,当然使用归并算法的思想是没有问题的。但为什么我称之为——调用者模式?因为我觉得递归的思想,就是本身调用本身假设该方法返回的是一个有序链表,那么我自己使用头插法,将最小的元素插入到头中就行了调用者不需要关注方法的实现。只是方法返回结果,调用者拿到结果之后,再进行逻辑处理或者直接返回。

1.3 五分钟玩转面试考点-数据结构-有序队列中删除重复元素
总结下: (1)有序数组原地删除重复元素:本质上使用了插入排序的思想,维护两个指针:左边数组是无序的,右边数组取出一个和左边数组最右元素比较,若是重复元素,则取下一个元素,直至不相同的元素。然后放入无序数组中。最后选出无序数组。(2)有序链表的删除(链表直接删除):使用cur.next=cur.next.next便可直接删除cur.next元素,cur在删除完重复元素之后,指针才往期前进一步。于是再次删除重复元素!关键是链表删除重复元素的成本地呀(3)链表保留不重复的元素:重复元素全部删除,一个不留。使用标志位,只要是重复元素,那么不会加入到新链表中,并且还要前进一位跳过所有重复元素。注意:是改造的原链表,那么在链表最后节点,要注意手动设置为null。即最后重复条件flag=false&&cur.next==null

2. 二叉树

2.1 五分钟玩转面试考点-数据结构-二叉树的遍历(人之路径,根之输出)
总结下:这篇讲的是遍历二叉树。基本上对树的操作均是建立在遍历算法之上的。为什么说人之路径是因为遍历路径总是相同的(除层次遍历外),只是根输出的时机不同。我们在处理二叉树的问题时,本质上就是处理的。而我们的结题思路,我觉得就可以定位在什么时候处理根合适

2.2 五分钟玩转面试考点-数据结构-二叉树遍历的作用(镜像二叉树+二叉树的深度)
总结下:我们学了二叉树遍历,有什么用呢?具体遇到问题时,我们应该选用那种遍历方式?这篇文章举例2个例子:(1)镜像二叉树:使用队列完成层次遍历,每一层中左右节点互换位置,当然是没问题。上文我们说过,操作二叉树就是操作,而操作想到了二叉树的遍历那么后序遍历中,我们第三次拿到,直接调换左右子树就可以了。前序遍历中,我们第一次拿到,若是直接调换也没问题。(2)二叉树的深度:我们知道h(二叉树)=max(h(左右两子树))+1,那么使用后序遍历,求得左右子树高度后,再输出。当然也可以使用层次遍历实现。

2.3 五分钟玩转面试考点-数据结构-二叉搜索树(递归萌芽2-调用者模式)
总结下:说真的,搜索二叉树的基本特性左子树<根<右子树。一般我们处理就是查找新增节点删除节点。(1)查找节点:二叉搜索树的特性:中序遍历结果一定是有序的。那么我们便可以使用中序遍历的方式进行查找。我们可以直接使用stack,进栈为第一次操作根;出栈为第二次操作根。(2)新增节点:二叉搜索树的特性:比根节点小的放左边,否则放右边。为什么说是调用者模式,是因为,这个方法本身就是返回一个插入好的二叉树,调用者不关心内部进行了什么逻辑,但是结果就是返回一个新的头结点,调用者只是关心结果。(3)删除节点,同理,也是不关心过程,只关心结果。

2.4 五分钟玩转面试考点-数据结构-重建二叉树(递归萌芽1-调用者模式)
总结下:前序+中序确定一个唯一的二叉树。但是我们知道规律“前序数组第一个节点是根节点,中序数组根节点左边是左子树,右边是右子树。”调用者每调用一次这个方法,均会返回一个二叉树。调用者只需做好自己的逻辑即可。即(1)声明根节点。(2)重建左右子树。(3)返回结果。

2.5 五分钟玩转面试考点-数据结构-最大堆与最小堆(TOP N问题)
总结下:堆就是数组组成的完全二叉树,特点是根大于(小于)左右子树。采用的是擂台赛的思维,带入到最(小)大堆的生成的。

2.6 五分钟玩转面试考点-数据结构-二叉树转化为链表(破坏-遍历)
总结下:这个问题,就是在边破坏树结构的时候边遍历树,在未遍历左右子树的时候,root不应该丢失对左右子树的位置。

2.7 五分钟玩转面试考点-数据结构-寻根之旅( 二叉树的最近公共祖先,调用者模式4-尾递归)
总结下:这次是对递归——调用者模式的一次总结。调用者模式一般用于尾递归。若是需要对递归返回值进行进一步处理的话,那么调用递归方法只会返回一个中间变量。二叉树的最近公共祖先,其实就是左右子树的根节点。那么如何最终确定根节点呢?其实需要遍历完左右子树后,也就是使用后序遍历。我们对最终返回的值进行处理。

2.8 五分钟玩转面试考点-数据结构-二叉树的序列化+反序列化
总结下:(1)对二叉排序树的序列化和反序列化。序列化可以直接使用前序遍历。对于反序列化,我们可以找到,遍历数组,直到第一个大于的子节点。那么我们就可以分出左右子树。使用调用者模式完成二叉树的重建。(敲黑板,划重点)需要考虑没有右子树的情况!即整个数组的值都小于根节点。(2)对于二叉树的重建。采用层次遍历进行的序列化,使用queue队列,将元素都保存到queue中(即使为null),反序列化的时候,借助ArrayList(为啥不用LinkedList)小胖考虑到,要查找List里面的元素,还是使用ArrayList速度更快一下,对于一个节点,赋值完左右子树之后,指针才移动到下一位。

3. 排序算法

3.1 归并算法——数据+链表归并排序
总结下:归并排序,是先将数列递归分解成一个个小数组——直至一个元素,然后进行有序数列的合并。数组的归并排序注意的下标边界。链表的归并排序,要使用快慢指针找到链表的中点,然后将链表断开,直至只有一个节点。然后五分钟玩转面试考点-数据结构-合并链表(递归萌芽3-调用者模式)进行有序链表的合并。

你可能感兴趣的:(五分钟玩转面试考点-数据结构-目录)