核心内容摘要
基于开源技术栈的毕业设计实战:如何高效构建可落地的「idea毕业设计项目免费」解决方案
以下是一个简单的二叉搜索树Binary Search Tree, BST的 C 实现包含插入、删除、查找和遍历等基本操作#include iostream using namespace std; // 树节点结构 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; class BST { private: TreeNode* root; // 插入节点递归辅助函数 TreeNode* insertHelper(TreeNode* node, int val) { if (!node) return new TreeNode(val); if (val node-val) node-left insertHelper(node-left, val); else node-right insertHelper(node-right, val); return node; } // 查找最小节点用于删除操作 TreeNode* findMin(TreeNode* node) { while (node-left) node node-left; return node; } // 删除节点递归辅助函数 TreeNode* deleteHelper(TreeNode* node, int val) { if (!node) return nullptr; if (val node-val) node-left deleteHelper(node-left, val); else if (val node-val) node-right deleteHelper(node-right, val); else { // 情况1叶子节点或仅有一个子节点 if (!node-left) return node-right; if (!node-right) return node-left; // 情况2有两个子节点 TreeNode* successor findMin(node-right); node-val successor-val; node-right deleteHelper(node-right, successor-val); } return node; } // 中序遍历递归 void inorderHelper(TreeNode* node) { if (!node) return; inorderHelper(node-left); cout node-val ; inorderHelper(node-right); } public: BST() : root(nullptr) {} // 插入操作 void insert(int val) { root insertHelper(root, val); } // 删除操作 void remove(int val) { root deleteHelper(root, val); } // 查找操作 bool search(int val) { TreeNode* cur root; while (cur) { if (val cur-val) return true; cur (val cur-val) ? cur-left : cur-right; } return false; } // 中序遍历 void inorder() { inorderHelper(root); cout endl; } }; int main() { BST tree; tree.insert(
; tree.insert(
; tree.insert(
; tree.insert(
; tree.insert(
; cout 中序遍历: ; tree.inorder(); // 输出: 20 30 40 50 70 cout 查找40: (tree.search(
? 存在 : 不存在) endl; cout 删除30后: ; tree.remove(
; tree.inorder(); // 输出: 20 40 50 70 }核心操作说明插入递归找到合适位置创建新节点时间复杂度$O(h)$$h$为树高度删除分三种情况处理叶子节点直接删除单子节点用子节点替换双子节点用后继节点右子树最小节点替换时间复杂度$O(h)$查找从根节点开始逐层比较时间复杂度$O(h)$遍历中序遍历可输出有序序列时间复杂度$O(n)$$n$为节点数注意二叉搜索树的性能取决于树的高度$h$。
理想情况下$h \log_2 n$平衡树最坏情况下$h n$退化为链表。
如需优化可研究平衡二叉搜索树如 AVL 树、红黑树。