数据结构与算法

知识点详解
数据结构

二叉搜索树

每个节点都包含一个值,每个节点至多有两棵子树,左孩子小于自己,右孩子大于自己,时间复杂度是O(log(n)),随着不断插入节点,二叉树树高变大,当只有左(右)孩子时,时间复杂度变为O(n).

平衡二叉树
保证每个节点左右子树高度差绝对值不超过1.
比如,AVL树在插入和删除数据是经常需要旋转以保持平衡.适合插入删除少场景.

红黑树

非严格平衡二叉树,更关注局部平衡,而非总体平衡,没有一条路径比其他路径长出两倍,接近平衡,减少了许多不必要的旋转操作,更加实用.
特点:

每个节点不是红就是黑
根节点是黑色
每个叶子都是黑色空节点
红色节点的子节点都是黑的
任意节点到其叶节点的每条路径上存在的黑色节点数量相同.
B树

适用于文件索引,优先减少磁盘IO次数,最大子节点称为B树的阶
m阶b树特点:

非叶子节点最多有m棵子树
根节点最少有两棵子树
非根非叶节点最少有m/2棵子树
非叶子节点保存的关键字个数,为该节点子树个数减一
非叶子节点的关键字大小有序
关键字的左孩子都小于该关键字,右孩子都大于关键字
所有叶节点都在同一层
采用二分查找法
B+树

定义与b树基本相同,
区别:

节点有多少关键字,有多少子树
关键字对应子树的节点都大于等于关键字,子树中包括关键字自身
所有关键字都出现在叶节点中
所有叶节点都有指向下一个叶节点的指针
搜索时只会命中叶节点,叶子节点相当于数据存储层,保存关键字对应的数据,非叶节点只保存关键字与指向叶节点的指针
B+树比B树更适合做索引:

叶节点之间有指针相连,B+树跟适合范围检索
由于非叶节点只保留关键字和指针,B+树可以容纳更多的关键字,降低树高,磁盘IO代价更低
B+树查询过程稳定,必须由根节点到叶节点,所有关键字查询路径相同,效率相当.Mysql数据可得索引就提供了B+树的实现B*树
在B+树的非叶节点上增加了指向同一层下一个非叶节点的指针

算法
字符串匹配问题
先于面试官交流,询问是否有其他要求

Example:判断给定字符串中的符号是否匹配
解题思路:

  1. 使用栈
  2. 遇到左括号入栈
  3. 与右括号出栈,判断出栈括号是否成对

private static fianl Map<Character,Character> brackets = new HashMap<>();
static{
brackets.put(’)’,’(’);
brackets.put(’]’,’[’);
brackets.put(’}’,’{’);
}

public static boolean isMatch(String str){
if(str==null){
return false;
}
Stack stack = new stack<>();
for(char ch : str.toCharArray()){
if(barckets.containsValue(ch)){
stack.put(che);
} else if (brackets.contiansKey(ch)){
if(stack.empty() || stack.pop() != bracjets.get(ch)){
return false;
}
}
}
return stack.empty();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值