235. 二叉搜索树的最近公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root->val > p->val && root->val > q->val)
return lowestCommonAncestor(root->left, p, q);
else if (root->val < p->val && root->val < q->val)
return lowestCommonAncestor(root->right, p, q);
else
return root;
}
701.二叉搜索树中的插入操作
只要放到叶子节点上就可以,因为不是平衡二叉搜索树
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (root == nullptr)
return new TreeNode(val);
if (val < root->val)
root->left = insertIntoBST(root->left, val);
else
root->right = insertIntoBST(root->right, val);
return root;
}
450. 删除二叉搜索树中的节点
TreeNode* deleteNode(TreeNode* root, int key) {
if (root == nullptr)
return nullptr;
if (key > root->val)
root->right = deleteNode(root->right, key); // 去右子树删除
else if (key < root->val)
root->left = deleteNode(root->left, key); // 去左子树删除
else{ // 当前节点就是要删除的节点
// 情况1,欲删除节点无左子
if (! root->left)
return root->right;
// 情况2,欲删除节点无右子
if (! root->right)
return root->left;
// 情况3,欲删除节点左右子都有
TreeNode* node = root->right;
while (node->left) // 寻找欲删除节点右子树的最左节点
node = node->left;
node->left = root->left; // 将欲删除节点的左子树成为其右子树的最左节点的左子树
root = root->right; // 欲删除节点的右子顶替其位置,节点被删除
}
return root;
}