目录
一、介绍
二、数据结构
1)顺序表(列表)
2)链表
3)堆栈
4)队列
5)二叉树
1. 树的相关概念
2. 二叉树遍历
一个青蛙一次可以跳1级台阶或2级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法
一个青蛙一次可以跳1级、2级、3级...n级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法
一、介绍
-
学习数据结构的目的
-
作为其他岗位的附加技能(开发工程师、人工智能工程师)
-
提升每个人的思维能力和编码能力
-
-
如何学好数据结构
-
多思考、多画图
-
多刷题 - 剑指offer(牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网)
-
二、数据结构
1)顺序表(列表)
-
内存连续,顺序表中的各个元素在内存中占用连续的存储空间。
-
元素本身连续(顺序表中各个元素所占的内存空间大小相同)
-
元素外置(元素本身不连续存储,但是存储单元是连续的)
-
-
特点
相对来说比较消耗内存,查找速度快、效率高。
2)链表
-
内存不连续,链表中的各个节点在内存中占用的不连续的存储空间。
-
每个节点既存储了具体的数据元素,同时又存储了指向下一个节点的引用。
-
相对来说比较节约内存,查找速度慢(需要从头到尾遍历)
-
链表分类
-
单链表
-
单向循环链表
-
双链表
-
双向循环链表
-
3)堆栈
-
限定在一端进行插入和删除操作的线性表。
-
相关概念
-
栈顶:负责入栈和出栈
-
栈底:不进行任何操作
-
空栈:栈中无元素时
-
-
特点
LIFO:后进先出
-
实现
-
顺序栈模型(使用列表实现栈)append() + pop()组合
-
链式栈模型(使用单链表实现栈)
-
4)队列
-
限定在两端进行插入和删除操作的线性表
-
相关概念
-
队尾:负责入队
-
队头:负责出队
-
空队列:当队列中无元素时
-
-
队列特点
FIFO:先进先出
-
实现
-
顺序队列模型(使用列表实现队列)
-
链式队列模型(使用单链表实现队列)
-
-
总结
顺序栈:append() + pop()
顺序队列:append() + pop(0)
5)二叉树
1. 树的相关概念
-
节点的度:节点下面子树的个数。
-
树的度:树中节点的最大度数。
-
叶子节点:度为0的节点。
-
节点的层次:根为第一层,具体看节点在第几层。
-
树的深度:树中节点的最大层次。
-
完全二叉树:除了最后一层,其余各层的节点数均已达到最大值,并且最后一层的节点要从左向右依次紧密的排列。
-
满二叉树:各层的节点数均已达到最大值。
-
二叉搜索树(二叉排序树):对于任意一个节点,所有左边的值都比此节点小,所有右边的值都比此节点大。
-
平衡二叉树:对于任何一个节点左右子树的高度差小于等于1。
2. 二叉树遍历
-
广度遍历(层次遍历)
从上向下,从左向右
-
深度遍历
-
前序遍历(根左右)
-
中序遍历(左根右)
-
后续遍历(左右根)
-
二叉搜索树中序遍历的结果是递增的序列
一个青蛙一次可以跳1级台阶或2级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法
-
举例大法找规律
-
1级台阶:1
-
2级台阶:2
-
3级台阶:3
-
4级台阶:5
-
5级台阶:8
-
-
递归思想(考虑最后一跳的情况)
-
最后一跳(跳1级台阶):f(n-1)
-
最后一跳(跳2级台阶):f(n-2)
-
总跳法:f(n) : f(n-1) + f(n-2)
-
def f(n):
if n == 1:
return 1
if n == 2:
return 2
return f(n-1) + f(n-2)
一个青蛙一次可以跳1级、2级、3级...n级台阶,一共有n级台阶,问青蛙跳到顶部有几种跳法
-
递归思想(考虑最后一跳)
-
最后跳1个台阶情况:f(n-1)
-
最后跳2个台阶情况:f(n-2)
-
最后跳3个台阶情况:f(n-3)
... ...
-
最后跳n个台阶情况:f(0)
-
总跳法
-
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(0)
-
f(n-1) = f(n-2) + f(n-3) + ... ... + f(0)
-
f(n) = 2 * f(n-1)
-
-
def f(n):
if n == 1:
return 1
return 2 * f(n-1)
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。
1.返回第k小的节点值即可
2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1
3.保证n个节点的值不一样
-
递归是函数自己调用自己。
-
递归一定分为递推和回归两个过程。
-
递归一定要有递归的出口。