🐵指尖猴全新升级
第5课:二叉搜索树
🔍

二叉搜索树

左小右大,查找像下楼梯一样痛快!

📖知识引入

📐BST性质
左子树所有节点小于根,右子树所有节点大于根
🔍查找
目标比当前小往左走,比当前大往右走,一次排除一侧
➕插入
沿着查找的路径走到空位,把新节点挂上去就好
🧾中序有序
对二叉搜索树做中序遍历,输出正好是升序序列
💡
判断一棵树是不是BST最快的一招:中序遍历一遍,看结果是否严格递增

🔍BST的查找与插入

TreeNode* insert(TreeNode* root, int v) {
    if (root == nullptr) return new TreeNode(v);
    if (v < root->val)      root->left  = insert(root->left, v);   // 小往左
    else if (v > root->val) root->right = insert(root->right, v);  // 大往右
    return root;
}

bool search(TreeNode* root, int v) {
    while (root != nullptr) {
        if (v == root->val) return true;
        root = (v < root->val) ? root->left : root->right;  // 二选一
    }
    return false;
}

查找和插入走的是同一条路:小往左、大往右。

🎯小测验

第1题:BST中比根大的值都在哪里?

第2题:对BST做哪种遍历能得到升序序列?

第3题:依次插入5、3、8、1后,根的左孩子是?

📝本课知识点

  • ✓左子树<根<右子树
  • ✓查找每次排除一侧
  • ✓中序遍历得升序
第5课完成!继续探索下一课吧 🚀