最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:
Dubbo面试专题
JVM面试专题
Java并发面试专题
Kafka面试专题
MongDB面试专题
MyBatis面试专题
MySQL面试专题
Netty面试专题
RabbitMQ面试专题
Redis面试专题
Spring Cloud面试专题
SpringBoot面试专题
zookeeper面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
===================================================================
假设我们已经构造好了一个这样的二叉树,如下图
我们要思考的第一个问题是如何查找某个值是否在该二叉树中?
根据上述的逻辑,我们来把搜索的方法进行完善。
根据上述逻辑,我们来写一个插入节点的代码。
再来分析一下:curDummy 和 parentDummy 是怎么找到“替罪羊”的。
class TreeNode{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val){
this.val = val;
}
}
public class BinarySearchTree {
TreeNode root;
//在二叉树中 寻找指定 val 值的节点
// 找到了,返回其节点地址;没找到返回 null
public TreeNode search(int key){
TreeNode cur = this.root;
while(cur != null){
if(cur.val == key){
return cur;
}else if(cur.val < key){
cur = cur.right;
}else{
cur = cur.left;
}
}
return null;
}
// 插入操作
public boolean insert(int key){
if(this.root == null){
this.root = new TreeNode(key);
return true;
}
TreeNode cur = this.root;
TreeNode parent = null;
while(cur!=null){
if(key > cur.val){
parent = cur;
cur = cur.right;
}else if(cur.val == key){
return false;
}else{
parent = cur;
cur = cur.left;
}
}
TreeNode node = new TreeNode(key);
if(parent .val > key){
parent.left = node;
}else{
parent.right = node;
}
return true;
}
// 删除操作
public void remove(int key){
TreeNode cur = root;
TreeNode parent = null;
// 寻找 删除节点位置。
while(cur!=null){
if(cur.val == key){
removeNode(cur,parent);// 真正删除节点的代码
break;
}else if(cur.val < key){
parent = cur;
cur = cur.right;
}else{
parent = cur;
cur = cur.left;
}
}
}
// 辅助删除方法:真正删除节点的代码
private void removeNode(TreeNode cur,TreeNode parent){
// 情况一
if(cur.left == null){
if(cur == this.root){
this.root = this.root.right;
}else if( cur == parent.left){
parent.left = cur.right;
}else{
parent.right = cur.right;
}
// 情况二
}else if(cur.right == null){
if(cur == this.root){
this.root = root.left;
}else if(cur == parent.left){
parent.left = cur.left;
}else{
parent.right = cur.left;
}
// 情况三
}else{
// 第二种方法:在删除节点的右子树中寻找最小值,
TreeNode parentDummy = cur;
TreeNode curDummy = cur.right;
while(curDummy.left != null){
parentDummy = curDummy;
## 最后
终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化
![image](https://img-blog.csdnimg.cn/img_convert/38a4b61448f2acb3c57132350d9a397f.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
rDummy.left != null){
parentDummy = curDummy;
## 最后
终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化
[外链图片转存中...(img-4u1Y4BRe-1715429794267)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**