对于BST的各种操作
- 新建节点:1、2
- 建立一个二叉查找树:3、4
- 删除节点:5、6
- struct node
- node* newNode(int v)
- void insert(node* &root,int x)
- node* Create(int data[],int n)
- node* findMax(node* root)
node* findMin(node* root) - void deleteNode(node* &root,int x)
#include<cstdio>
struct node{
int data;
node* lchild;
node* rchild;
};
node* newNode(int v){
node* Node = new node;
Node -> data = v;
Node -> lchild = Node -> rchild = NULL;
return Node;
}
void insert(node* &root,int x){
if(root == NULL){
root = newNode(x);
return;
}
if(x == root -> data){
return;
}else if(x < root -> data){
insert(root -> lchild,x);
}else{
insert(root -> rchild,x);
}
}
node* Create(int data[],int n){
node* root = NULL;
for(int i = 0;i < n;i++){
insert(root,data[i]);
}
return root;
}
node* findMax(node* root){
while(root -> rchild != NULL){
root = root -> rchild;
}
return root;
}
node* findMin(node* root){
while(root -> lchild != NULL){
root = root -> lchild;
}
return root;
}
void deleteNode(node* &root,int x){
if(root == NULL) return;
if(root -> data == x){
if(root -> lchild == NULL && root -> rchild == NULL){
root = NULL;
}else if(root -> lchild != NULL){
node* pre = findMax(root -> lchild);
root -> data = pre -> data;
deleteNode(root -> lchild,pre -> data);
}else{
node* post = findMin(root -> rchild);
root -> data = post -> data;
deleteNode(root -> rchild,post -> data);
}
}else if(root -> data > x){
deleteNode(root -> lchild,x);
}else
deleteNode(root -> rchild,x);
}