二叉树 part05
二叉搜索树操作
● 235. 二叉搜索树的最近公共祖先
● 701.二叉搜索树中的插入操作
● 450.删除二叉搜索树中的节点
二叉搜索树的最近公共祖先
法1:
繁杂代码
TreeNode* traversal(TreeNode* cur, TreeNode* p, TreeNode* q){
if (cur == NULL)return cur;
if (cur->val > p->val && cur->val > q->val){
TreeNode* left = traversal(cur->left,p,q);
if (left != NULL)return left;
}
if (cur->val < p->val && cur->val < q->val){
TreeNode* right = traversal(cur->right,p,q);
if (right != NULL)return right;
}
return cur;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
traversal(root,p,q);
}
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.二叉搜索树中的插入操作
法1: 递归
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (root == NULL){
TreeNode* node = new TreeNode(val);
return node;
}
if (root->val > val) root->left = insertIntoBST(root->left,val);
if (root->val < val) root->right = insertIntoBST(root->right,val);
return root;
}
删除二叉搜索树中的节点
法1:递归
TreeNode* deleteNode(TreeNode* root, int key) {
if (root == nullptr) return nullptr;
if (root->val == key){
if (root->left == nullptr && root->right == nullptr){
delete root;
return nullptr;
}
if (root->left == nullptr) {
auto retNode = root->right;
delete root;
return retNode;
}
else if (root->right == nullptr) {
auto retNode = root->left;
delete root;
return retNode;
}
else{
TreeNode* cur = root->right;
while (cur->left != nullptr){
cur = cur->left;
}
cur->left = root->left;
TreeNode* temp = root;
root =root->right;
delete temp;
return root;
}
}
if (root->val > key)root->left = deleteNode(root->left,key);
if (root->val < key)root->right = deleteNode(root->right,key);
return root;
}