什么是二叉树
- 是一棵树
- 每个节点最多只能有两个节点
- 树节点的数据结构 {value, left?, right?}
- 没有子节点的节点 叫叶子节点
遍历
- 前序遍历 root -> left -> right
- 中序遍历 left -> root -> right
- 后续遍历 left -> right -> root
树的结构
拿到树 就是拿到树的根节点
interface ItreeNode {
value: number
left: ItreeNode | null
right: ItreeNode | null
}
创建一棵树
const trees:ItreeNode = {
value: 5,
left: {
value: 3,
left: {
value: 2,
left: null,
right: null
},
right: {
value: 4,
left: null,
right: null
}
},
right: {
value: 7,
left: {
value: 6,
left: null,
right: null
},
right: {
value: 8,
left: null,
right: null
}
}
}
前序遍历
/**
* 前序遍历
*/
function preOrderTraverse (node: ItreeNode | null) {
if (node === null) return;
console.log(node.value)
preOrderTraverse(node.left)
preOrderTraverse(node.right)
}
中序遍历
/**
* 中序遍历
*/
function inOrderTraverse (node: ItreeNode | null) {
if (node === null) return;
inOrderTraverse(node.left)
console.log(node.value)
inOrderTraverse(node.right)
}
后序遍历
/**
* 后续遍历
*/
function postOrderTraverse (node: ItreeNode | null) {
if (node === null) return;
postOrderTraverse(node.left)
postOrderTraverse(node.right)
console.log(node.value)
}
什么是二叉搜索树
- left 包括其后代 value <= root value
- right 包括其后代 value >= root value 可以使用二分法进行快速查找
在二叉搜索树中 找到第K 小的值
根据二叉搜索树的特点,结合中序遍历,那就会得到一个递增的数组,很容易就找到第K 小的值
思考
为什么是二叉树 不是三叉树 不是四叉树
因为二分 所以是二叉树 性能,性能,还是性能
- 数组 查找块 删除慢
- 链表 查找慢 增删快
- 二叉搜索树 查找快 增删快
BST 如果不对称 就是链表了
平衡二叉搜索树 BBST 只有平衡的情况下,才能最大的使用二分
红黑树
一种自平衡二叉树 维持平衡的效率最高
B树
物理结构上是多叉树, 但是逻辑结构上是二叉树 比如mysql
2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注:奋斗的刚子