![13638982-f7976461c110adcf.jpg](https://i-blog.csdnimg.cn/blog_migrate/cbd4f7dbf6d988aa025d8ea3b56810ad.jpeg)
欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。
前言
为了能够在面试回答中优雅而不失体面回答面试考点,该文章借鉴了不同平台对知识点的描述。
- 如有侵权请联系我
- 文章的不足和错误请指正,好的建议也不要吝啬,我都会采纳并更正
字节跳动Java面试题精选——算法与数据结构【含答案】,点赞,转发,收藏一气呵成!
金九银十虽已过去大半,但还有金三银四呀,最新整理一些算法与数据结构以及答案总结,希望对想进BAT的同学有帮助。
正文——算法与数据结构
1.如何判断链表是否有环
方法1:快慢指针法 2.设两个工作指针p、q,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。比如p从A走到D,用了4步,而q则用了14步。因而步数不等,出现矛盾,存在环。
2.红黑树
二叉搜索树:(Binary Search Tree又名:二叉查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。
红黑树是一棵二叉搜索树,它在每个结点上增加一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树没有一条路径会比其他路径长出2倍,所以红黑树是近似平衡的,使得红黑树的查找、插入、删除等操作的时间复杂度最坏为O(log n),但需要注意到在红黑树上执行插入或删除后将不在满足红黑树性质,恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。虽然插入和删除很复杂,但操 作时间仍可以保持为 O(log n) 次。具体如何保证?引出红黑树的5个性质。
红黑树的5个性质:满足以下五个性质的二叉搜索树
- 每个结点或是红色的或是黑色的
- 根结点是黑色的
- 每个叶结点是黑色的
- 如果一个结点是红色的,则它的两个子结点是黑色