商城首页欢迎来到中国正版软件门户

您的位置:首页 >C++二叉搜索树插入节点详解

C++二叉搜索树插入节点详解

  发布于2025-11-26 阅读(0)

扫一扫,手机访问

插入节点需遵循BST规则,递归法通过比较值大小决定左右子树插入位置,代码简洁;迭代法用指针遍历至空位插入,节省栈空间。两种方法均保持BST性质,中序遍历结果有序,可根据场景选择使用。

c++中如何在二叉搜索树插入节点_c++二叉搜索树插入节点方法

在C++中,向二叉搜索树(Binary Search Tree, BST)插入节点需要遵循BST的规则:对于任意节点,左子树的所有值小于该节点值,右子树的所有值大于该节点值。插入操作可以通过递归或迭代方式实现。

定义二叉搜索树节点结构

插入前,先定义树的节点结构:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

递归方式插入节点

递归方法思路清晰,从根节点开始比较,根据值的大小决定进入左子树或右子树,直到找到空位置插入新节点。

TreeNode* insertIntoBST(TreeNode* root, int val) {
    if (!root) {
        return new TreeNode(val); // 空位置,创建新节点
    }
    if (val < root->val) {
        root->left = insertIntoBST(root->left, val); // 插入左子树
    } else {
        root->right = insertIntoBST(root->right, val); // 插入右子树
    }
    return root; // 返回根节点
}

说明:函数返回类型为 TreeNode*,用于更新子树连接。若根为空,直接返回新节点;否则递归处理左右子树。

迭代方式插入节点

迭代方式使用指针遍历树,找到合适的空位置后插入,无需递归调用。

TreeNode* insertIntoBST(TreeNode* root, int val) {
    TreeNode* newNode = new TreeNode(val);
    if (!root) return newNode;
TreeNode* current = root;
while (true) {
    if (val < current->val) {
        if (!current->left) {
            current->left = newNode;
            break;
        }
        current = current->left;
    } else {
        if (!current->right) {
            current->right = newNode;
            break;
        }
        current = current->right;
    }
}
return root;

}

说明:从根节点开始移动指针,根据比较结果向左或向右走,直到子节点为空时插入新节点。

使用示例

构建一个简单BST并插入节点:

int main() {
    TreeNode* root = nullptr;
    root = insertIntoBST(root, 5);
    root = insertIntoBST(root, 3);
    root = insertIntoBST(root, 7);
    root = insertIntoBST(root, 2);
    root = insertIntoBST(root, 4);
    return 0;
}

最终形成的树结构符合BST性质,中序遍历会输出有序序列:2, 3, 4, 5, 7。

基本上就这些。递归写法简洁,适合理解逻辑;迭代节省栈空间,适合深度较大的树。根据需求选择合适方法即可。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注