前端面试真题,2周刷完100道。10. 二叉树的基础内容

96 阅读2分钟

什么是二叉树

  1. 是一棵树
  2. 每个节点最多只能有两个节点
  3. 树节点的数据结构 {value, left?, right?}
  4. 没有子节点的节点 叫叶子节点

遍历

  1. 前序遍历 root -> left -> right
  2. 中序遍历 left -> root -> right
  3. 后续遍历 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)
}

什么是二叉搜索树

  1. left 包括其后代 value <= root value
  2. right 包括其后代 value >= root value 可以使用二分法进行快速查找

在二叉搜索树中 找到第K 小的值

根据二叉搜索树的特点,结合中序遍历,那就会得到一个递增的数组,很容易就找到第K 小的值

思考

为什么是二叉树 不是三叉树 不是四叉树

因为二分 所以是二叉树 性能,性能,还是性能

  • 数组 查找块 删除慢
  • 链表 查找慢 增删快
  • 二叉搜索树 查找快 增删快

BST 如果不对称 就是链表了

平衡二叉搜索树 BBST 只有平衡的情况下,才能最大的使用二分

红黑树

一种自平衡二叉树 维持平衡的效率最高

hhs.png

B树

物理结构上是多叉树, 但是逻辑结构上是二叉树 比如mysql

bs.png

2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注:奋斗的刚子