• 常用
  • 百度
  • google
  • 站内搜索

科技

C++中二叉搜索树的节点插入方法

  • 更新日期:2025-11-26
  • 查看次数:6769

插入节点需遵循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删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

imtoken下载 im钱包 imtoken imtoken 快连官网 imtoken imtoken imtoken imtoken imtoken wallet imtoken imtoken官网 imtoken钱包 imtoken下载 imtoken官网 imtoken钱包 imtoken安卓下载 imtoken下载 imtoken官方下载 imtoken官网 imtoken安卓下载 imtoken下载 imtoken下载 imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken imtoken bitget wallet telegram下载 quickq VPN trust wallet v2rayn imtoken