来源公众号:苦逼的码农

作者:帅地

无论是在面试还是在平时的做题中,链表相关算法题以及二叉树相关算法题,可以说是考的非常非常多的。我在 2019 的秋招面试中,也是遇到了好几次。为此,我总结了 9 道最高频的链表相关面试题以及 8 道二叉树相关面试题,并且每道题都给出详细的解答,如果你把这些链表题都搞懂了,那么我相信你在链表方面,是没有太大问题的了,二叉树也是。为了大家方便定位,这里先给出大概的提纲:

1、【链表问题】如何优雅着反转单链表
2、【链表问题】删除单链表中的第K个节点
3、【链表问题】删除单链表的中间节点
4、【链表问题】环形单链表约瑟夫问题
5、【链表问题】三种方法带你优雅判断回文链表
6、【链表问题】将单向链表按某值划分成左边小,中间相等,右边大的形式
7、【链表问题】复制含有随机指针节点的链表
8、【链表问题】将单链表的每K个节点之间逆序
9、【链表问题】将搜索二叉树转换成双向链表
10、【二叉树问题】二叉树的先序遍历(非递归版)
11、【二叉树问题】二叉树的中序编历(非递归版)
12、【二叉树问题】二叉树的后序遍历(非递归版)
13、【二叉树问题】从上往下打印二叉树
14、【二叉树问题】从上往下打印二叉树
15、【二叉树问题】二叉树镜像
16、【二叉树问题】二叉树的子结构
17、【二叉树问题】重建二叉树

1、【链表问题】如何优雅着反转单链表

【题目描述】

反转单链表。例如链表为:

1->2->3->4

反转后为

4->3->2->1

【要求】

如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1)

答案看这里:答案解析

2、 【链表问题】删除单链表中的第K个节点

在单链表中删除倒数第 K 个节点。
要求:如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1)

答案看这里:答案解析

3、【链表问题】删除单链表的中间节点

给定链表的头节点head,实现删除链表的中间节点的函数。

  例如:

  步删除任何节点;

  1->2,删除节点1;

  1->2->3,删除节点2;

  1->2->3->4,删除节点2;

  1->2->3->4-5,删除节点3;
要求:如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1)

答案看这里:答案解析

4、【链表问题】环形单链表约瑟夫问题

在这里插入图片描述

输入:一个环形单向链表的头节点 head 和报数 m.

返回:最后生存下来的节点,且这个节点自己组成环形单向链表,其他节点都删除掉。

答案看这里:答案解析

5、【链表问题】三种方法带你优雅判断回文链表

给定一个链表的头节点 head, 请判断该链表是否为回文结构。

例如:

1->2->1,返回 true.

1->2->2->1, 返回 true。

1->2->3,返回 false。

要求:如果链表的长度为 N, 时间复杂度达到 O(N)。

答案看这里:答案解析

6、【链表问题】将单向链表按某值划分成左边小,中间相等,右边大的形式

给定一个单向链表的头结点head,节点的值类型是整型,再给定一个整数privot。实现一个调整链表的函数,将链表调整为左部分都是值小于privot的节点,中间部分都是值等于privot的节点,右部分都是大于privot的节点。且对某部分内部节点的顺序不做要求

例如:链表9-0-4-5-1,pivot=3。

调整后是1-0-4-9-5,

也可以是0-1-9-5-4

要求:如果链表的长度为 N, 时间复杂度达到 O(N)。

答案看这里:答案解析

7、【链表问题】复制含有随机指针节点的链表

在这里插入图片描述

要求:如果链表的长度为 N, 时间复杂度达到 O(N)。

答案看这里:答案解析

8、【链表问题】将单链表的每K个节点之间逆序

给定一个单链表的头节点head, 实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。

例如:

链表:1->2->3->4->5->6->7->8->null, K = 3。

调整后:3->2->1->6->5->4->7->8->null。其中 7,8不调整,因为不够一组。

要求:如果链表的长度为 N, 时间复杂度达到 O(N)。

答案看这里:答案解析

9、【链表问题】将搜索二叉树转换成双向链表

对于二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针;对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针。在结构上,两种结构有相似性,现有一棵搜索二叉树,请将其转为成一个有序的双向链表。

例如:

在这里插入图片描述

这棵二查搜索树转换后的双向链表从头到尾依次是 1~9。对于每一个节点来说,原来的 right 指针等价于转换后的 next 指针,原来的 left 指针等价于转换后的 last 指针,最后返回转换后的双向链表的头节点。

要求:如果链表的长度为 N, 时间复杂度达到 O(N)。

答案看这里:答案解析

10、【二叉树问题】二叉树的先序遍历(非递归版)

按照二叉树的先序遍历打印二叉树,并且不能使用递归。

答案看这里:答案解析

11、【二叉树问题】二叉树的中序编历(非递归版)

按照二叉树的中序遍历打印二叉树,并且不能使用递归。

答案看这里:答案解析

12、【二叉树问题】二叉树的后序遍历(非递归版)

按照二叉树的后序遍历打印二叉树,并且不能使用递归。

答案看这里:答案解析

13、【二叉树问题】从上往下打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

答案看这里:答案解析

14、【二叉树问题】从上往下打印二叉树

题目

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

答案看这里:答案解析

15、【二叉树问题】二叉树镜像

题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

二叉树结构:

1 class TreeNode {2     int val;3     TreeNode left;4     TreeNode right;5     TreeNode(int x) { val = x; }6 }

答案看这里:答案解析

16、【二叉树问题】二叉树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

答案看这里:答案解析

17、【二叉树问题】重建二叉树

题目

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

答案看这里:答案解析

总结

关于二叉树的还要很多常见算法题,并且也有一定的难度,今天这几道二叉树算是相对简单的,后面慢慢给大家讲解,今天这篇文章,主要是为了让大家方便查找,所以总结了一波。

推荐阅读

告别动态规划,连刷40道动规算法题,我总结了动规的套路

动态规划该如何优化?我总结了这些套路,以后优化就是分分钟

写了很久,这是一份适合普通大众/科班/非科班的『学习路线』

普普通通,我的三年大学

历经两个月,我的秋招之路结束了!

程序员必须掌握的算法有哪些?谈谈这这几年学过的算法

【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

编写算法判别给定二叉树是否为完全二叉树_别找了,链表和二叉树相关面试题以及解答,我都给你们找好了...相关推荐

  1. 编写算法判别给定二叉树是否为完全二叉树_推荐一位实力超强的平安前端算法大佬:瓶子君...

    今天给大家推荐一位平安大佬:前端瓶子君,一个专注于前端开发的小瓶子,五年大厂开发经验,掘金优秀作者. 「前端进阶算法」系列是她4月初发起的活动,从 0 到 1 构建完整的前端数据结构与算法体系.这是一 ...

  2. c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1

    二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...

  3. c++编写算法判断二叉树是否为完全二叉树_字节面试官:连这90道LeetCode算法题都不会也来面试?...

    面试大厂必刷:LeetCode算法90题 1. 买股票的最佳时机 难度级别:简单 题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一 ...

  4. 二叉链表和职工管理系统结合_基于二叉链表的二叉树实现

    main.c// 数据结构实验三 Created by 南隹 on 2019/11/12.// Copyright © 2019 南隹. All rights reserved.//以下代码部分功能需 ...

  5. 判断给定二叉树是否是完全二叉树

    二叉树按二叉链表形式存储,设计算法判断给定二叉树是否是完全二叉树 根据完全二叉树的定义,具有n个结点的完全二叉树与满二叉树中编号从1~n的结点一一对应.算法思想:采用层次遍历算法,将所有结点加入队列( ...

  6. 6.36③ 若已知两棵二叉树B1和B2皆为空,或者皆 不空且B1的左、右子树和B2的左、右子树分别相似, 则称二叉树B1和B2相似。试编写算法,判别给定两 棵二叉树是否相似。

    6.36③  若已知两棵二叉树B1和B2皆为空,或者皆 不空且B1的左.右子树和B2的左.右子树分别相似, 则称二叉树B1和B2相似.试编写算法,判别给定两 棵二叉树是否相似. 要求实现下列函数: S ...

  7. 已知一棵完全二叉树存于顺序表sa中,sa.elem[1..sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表。

    已知一棵完全二叉树存于顺序表sa中,sa.elem[1-sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表. 分析:由二叉树的性质可知,一个下标为i的节点若有左子树,则其左 ...

  8. JavaScript数据结构与算法(2)(集合、字典、哈希表、二叉树、图)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  9. 用二叉链表存储二叉树,并判断二叉树是否为完全二叉树

    题目: 按要求二叉树按二叉链表形式存储, 1.写一个建立二叉树的算法:2.写一个判别给定的二叉树是否是完全二叉树的算法 分析:判断是否是完全二叉树的方法:若某结点无左子女就不应有右子女 建立二叉树[递 ...

最新文章

  1. SAP Batch Management 批次主数据中classification视图中GR Date没有被更新?
  2. SpringMVC自动将请求参数和入参对象的属性进行一一绑定;要求请求参数的名字和javaBean入参的对象里面的属性名是一样的||员工的增删改查案例
  3. 5分钟学会开发浏览器扩展
  4. 化工原理第四版课后习题答案
  5. ruby html解析器
  6. 5-4 是否同一棵二叉搜索树 (25分)
  7. java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询
  8. python中grid函数_python tkinter中的grid布局是什么?
  9. php在web服务器中的工作原理
  10. 【雷达通信】基于matlab联邦滤波算法惯性+GPS+地磁组合导航仿真【含Matlab源码 1276期】
  11. 软考高级系统分析师考试2022论文考了些啥?改为二选一
  12. 黑客攻防技术宝典浏览器实战篇
  13. 数字化营销如何打造全链路数据统计解决方案
  14. 零基础python教程视频
  15. AURIX TC397 ASCLIN UART
  16. 拼多多收php吗_拼多多果园助力PHP版可运行在云函数
  17. 少儿学python真的有用吗_如何看待海淀妈妈们认为Python是儿童才学的低端编程?...
  18. React最佳实践系列 —— Dva快速入门
  19. PPC音量太小和听筒音太小的解决方法
  20. 孟岩:想抓住EOS的机会,从这四个方向入手吧!

热门文章

  1. 整理自己的.net工具库
  2. 深入Java虚拟机-第二章-Java内存区域-学习笔记
  3. ecshop 多语言版 fckeditor,支持中文英文韩文等众多语言
  4. win10无法新建文件夹怎么办 win10右键新建菜单设置方法
  5. 2013年最新最热播的电影 合集
  6. HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...
  7. 使用SVN+apache搭建一个版本控制服务器
  8. Windows下Jenkins的详细安装及使用
  9. ELK结合Beats工具的搭建使用(Metricbeat、Filebeat、Topbeat)
  10. Zabbix系统端口监控状态