数据结构上机作业(七),java面试sql笔试题目

public void put(Key key,Value value){

root = put(root,key,value);

}

/**

  • 向指定树x中添加key_value,并返回添加元素后的数.

  • @param x

  • @param key

  • @param value

  • @return

*/

// 这里运用了递归的思想.从根节点开始的.

// 结束条件是第一个if和最后一个else

public Node put(Node x,Key key,Value value){

// 如果x子树为空

if (x == null){

this.length ++;

return new Node(key,value,null,null);

}

// 如果x子树不为空

// 比较x节点的键和key的大小

int compare = key.compareTo(x.key);

if (compare > 0){

// 如果key大于x节点的键,则继续寻找x节点的右子树

x.right = put(x.right, key, value);

}else if (compare < 0){

// 如果key小于x节点的键,则继续寻找x节点的左子树

x.left = put(x.left, key, value);

}else{

// 如果key等于x节点的键,则替换x节点的值为value即可

x.value = value;

}

return x;

}

/**

  • 查询树中指定key对应的Value

  • @return

*/

public Value get(Key key){

return get(root,key);

}

/**

  • 从指定的树x中,查找key对应的值

  • @param x

  • @param key

  • @return

*/

public Value get(Node x,Key key){

//如果x子树为空

if (x == null){

return null;

}

// 如果x子树不为空

// 比较x节点的键和key的大小

int compare = key.compareTo(x.key);

if (compare > 0){

// 如果key大于x节点的键,则继续寻找x节点的右子树

return get(x.right, key);// 接下来是查找x的右子书,一直调用get方法直到return出来

}else if (compare < 0){

// 如果key小于x节点的键,则继续寻找x节点的左子树

return get(x.left,key);

}else{

// 如果key等于x节点的键,就找到了键为key的节点,只需要返回x节点的值即可

return x.value;

}

}

/**

  • 删除树中key对应的value

  • @param key

*/

public void delete(Key key){

delete(root,key);

}

/**

  • 删除指定树x中的key对应的value,并返回删除后的新树

  • @param x

  • @param key

  • @return

*/

public Node delete(Node x,Key key){

// x 树为null{

if (x == null){

return null;

}

// 如果x子树不为空

// 比较x节点的键和key的大小

int compare = key.compareTo(x.key);

if (compare > 0){

// 如果key大于x节点的键,则继续寻找x节点的右子树

x.right = delete(x.right,key);

}else if (compare < 0){

// 如果key小于x节点的键,则继续寻找x节点的左子树

x.left = delete(x.left,key);

}else{

// 如果key等于x节点的键,完成真正的删除动作,要删除的节点就是x;

// 先找到右子树中最小的节点

// 如果右子树不存在,直接返回左子树

if (x.right == null){

return x.left;

}

// 如果左子树不存在,直接返回右子树

if(x.left == null){

return x.right;

}

// 如果左右子树都存在,则寻找右子树中的最小子树

Node minNode = x.right;

while (minNode.left != null){

minNode = minNode.left;

}

// 删除右子树中的最小节点

Node node = x.right;

while(node.left!=null){

// 当前节点的下一个节点的下一个节点是尾节点,那么让当前节点的下一个节点指向null,就能完成尾结点的删除了

if (node.left.left == null){

node.left = null;

}else{

node = node.left;

}

}

// 让x节点的左子树成为minNode的左子树

minNode.left = x.left;

// 让x节点的右子树成为minNode的右子树

minNode.right = x.right;

// 让x的父节点指向minNode

x = minNode;

// 元素个数减一

this.length --;

}

return x;

}

/**

  • 查找整个树中最小的键

  • @return

*/

public Key min(){

return min(root).key;

}

/**

  • 在指定书中找到最小键所在节点

  • @param x

  • @return

*/

private Node min(Node x){

// 判断x还有没有左子节点,如果有,则继续向左找,如果没有,那么x就是最小键所在节点

if (x.left != null){

return min(x.left);

}else {

return x;

}

}

/**

  • 查找整个树中最小的键

  • @return

*/

public Key max(){

return max(root).key;

}

/**

  • 在指定书中找到最大键所在节点

  • @param x

  • @return

*/

private Node max(Node x){

// 判断x还有没有左右子节点,如果有,则继续向右找,如果没有,那么x就是最大键所在节点

if (x.right != null){

return min(x.right);

}else {

return x;

}

}

/**

  • 获取整个树中所有的键

  • @return

*/

public Queue preErgodic(){

Queue keys = new Queue<>();

preErgodic(root,keys);

return keys;

}

/**

  • 获取指定树x的所有键,并放到keys队列中

  • @param x

  • @param keys

*/

// 前序遍历,先根节点再左子树,再右子树

private void preErgodic(Node x,Queue keys){

if (x==null){

return;

}

// 把x节点的key放入keys中

keys.enqueue(x.key);

// 递归遍历x节点的左子树

if (x.left != null){

preErgodic(x.left,keys);

}

// 递归遍历x节点的右子树

if (x.right!=null){

preErgodic(x.right,keys);

}

}

/**

  • 使用中序遍历获取树中所有的键

  • @return

*/

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题**

[外链图片转存中…(img-Rb8oz4Zw-1711037897597)]

《算法的乐趣》共有23个章节:

[外链图片转存中…(img-pfInGm0S-1711037897597)]

[外链图片转存中…(img-oN2J4e4s-1711037897598)]

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

[外链图片转存中…(img-YGQLDInl-1711037897599)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-pMbJUxUN-1711037897599)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值