#include <iostream>
const int maxn=1000;
int N;
int seq[maxn];
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 search(Node* root,int x){//查找结点
if(root==NULL){
printf("search failed!");
return;
}
if(root->data==x) printf("%d",root->data);
else if(x<root->data) search(root->lchild,x);
else search(root->rchild,x);
}
void insert(Node* &root,int x){//插入节点
if(root==NULL){
root=newNode(x);
return;
}
if(x<root->data)
insert(root->lchild,x);
else insert(root->rchild,x);
}
Node* creatBST(int n){//建立二叉树
Node* root= NULL;
for(int i=0;i<n;i++)
insert(root,data[i]);
return root;
}
Node* findMin(Node* root){//寻找以root为根的树的最小节点
while(root->lchild!=NULL) root=root->lchild;
return root;
}
Node* findMax(Node* root){//寻找以root为根的树的最大节点
while(root->rchild!=NULL) root=root->rchild;
return root;
}
void deleteNode(Node* &root,int x){//删除节点
if(root==NULL) return;
if(root->data==x){
if(root->rchild==NULL && root->lchild==NULL){
root=NULL;
return;
}
if(root->lchild!=NULL){
Node* pre=findMax(root->lchild);
root->data=pre->data;
deleteNode(pre,pre->data);
}
else if(root->rchild!=NULL){
Node* next=findMin(root->rchild);
root->data=next->data;
deleteNode(next,next->data);
}
}
else if(root->data>x){
deleteNode(root->lchild,x);
}
else if(root->data<x){
deleteNode(root->rchild,x);
}
}
int main(int argc, char** argv) {
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&seq[i]);
}
Node* node=creatBST(N);
return 0;
}
二叉查找树(BST)的基本操作
最新推荐文章于 2024-09-17 19:01:47 发布