10.27

二叉搜索树
1.什么是二叉搜索树?
对于树中的任意一个节点 N:
左子树 中所有节点的值 都小于 N 的值;
右子树 中所有节点的值 都大于 N 的值;
左右子树也分别是二叉搜索树。
2.常见操作(递归思想)
(1).查找
TreeNode* search(TreeNode* root, int key) {
if (!root || root->val == key) return root;
if (key < root->val) return search(root->left, key);
else return search(root->right, key);
}
(2).插入
TreeNode* insert(TreeNode* root, int key) {
if (!root) return new TreeNode(key);
if (key < root->val)
root->left = insert(root->left, key);
else if (key > root->val)
root->right = insert(root->right, key);
return root;
}
(3).删除
情况1,2是目标节点没有子树或者只有一个子树,直接删除,有孩子就补上即可
情况3是目标节点有两个子树,先找出右子树中最小值,将其覆盖到目标节点上,再递归调用函数删除右子树中的最小值节点。
Node* findMin(Node* root) {
while (root->left) root = root->left;
return root;
}

Node* deleteNode(Node* root, int key) {
if (!root) return NULL;

if (key < root->val)
    root->left = deleteNode(root->left, key);
else if (key > root->val)
    root->right = deleteNode(root->right, key);
else { // 找到要删除的节点
    // 情况1和2
    if (!root->left) return root->right;
    else if (!root->right) return root->left;
    // 情况3
    Node* minNode = findMin(root->right);
    root->val = minNode->val;
    root->right = deleteNode(root->right, minNode->val);
}
return root;

}

posted @ 2025-10-27 21:18  w1nn0w  阅读(2)  评论(0)    收藏  举报