c++实现二叉查找树示例


以下是一个C++实现的二叉查找树(Binary Search Tree, BST)的基本示例,包括插入和遍历(中序遍历)功能。请注意,这个示例仅用于演示目的,并且没有包括删除节点、查找最大值、最小值等高级功能。


#include <iostream>

using namespace std;

// 定义二叉树节点结构体
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

// 定义二叉查找树类
class BinarySearchTree {
public:
    TreeNode* root;

    BinarySearchTree() : root(nullptr) {}

    // 插入新值
    void insert(int val) {
        root = insertRec(root, val);
    }

    // 递归插入
    TreeNode* insertRec(TreeNode* node, int val) {
        if (node == nullptr) {
            return new TreeNode(val);
        }

        if (val < node->val) {
            node->left = insertRec(node->left, val);
        } else if (val > node->val) {
            node->right = insertRec(node->right, val
);        }

        return node;
    }

    // 中序
遍历
    void inorderTraversal(TreeNode* node) {
        if (node == nullptr) {
            return;
        }
        inorderTraversal(node->left);
        cout << node->val << " ";
        inorderTraversal(node->right);
    }
};

// 主函数示例
int main() {
    BinarySearchTree bst;

    // 插入元素
    bst.insert(50);
    bst.insert(30);
    bst.insert(20);
    bst.insert(40);
    bst.insert(70);
    bst.insert(60);
    bst.insert(80);

    // 中序遍历
    cout << "Inorder traversal of BST: ";
    bst.inorderTraversal(bst.root);
    cout << endl;

    return 0;
}

这段代码首先定义了一个`TreeNode`结构体来表示二叉树的节点,然后定义了一个`BinarySearchTree`类来封装二叉查找树的基本操作。在`BinarySearchTree`类中,我们实现了插入节点(`insert`和`insertRec`)和中序遍历(`inorderTraversal`)的功能。最后,在`main`函数中,我们创建了一个`BinarySearchTree`对象,并插入了一些示例值,然后执行了中序遍历以打印出树中的元素。

请注意,这个示例仅用于教学目的,并假设您已经对C++有一定的了解。在实际应用中,您可能需要根据具体需求对二叉查找树进行更多的扩展和优化。