生活随笔
收集整理的這篇文章主要介紹了
【二叉查找树BST】二叉查找树的基本操作总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉樹就是一棵順序樹,優化查找效率。一組相同的數據所構造出來的二叉查找樹不同。
二叉查找樹的查找:(一個函數) struct Node{int data;Node* lchild,rchild;
};
//查找
void search(Node* root,int x){ //指向樹的指針,要查找的樹 if(root==NULL) return; //查找失敗,遞歸邊界if(root->data==x){printf("%d",root->data); //找到了該數 }else if(root->data>x){search(root->lchild,x);} else{search(root->lchild,x);}
}
?
二叉查找樹的插入:(一個直接函數,一個引用函數(node* newNode(int x)))
//插入
void insert(Node* &root,int x){if(root==NULL){ //空樹,遞歸邊界 Node* root=newNode(x);return; }if(root->data==x){ //已存在,直接返回 return; }else if(root->data>x){ //x小于根結點 insert(root->lchild,x); }else{insert(root->rchild,x);}
} Node* newNode(int x){Node* node=new Node; //創建一個新的結點node->data=x; //給新節點賦值node->lchild=node->rchild=NULL; //設置新節點左右兩邊均為空 return node;
} ?
二叉查找樹的建立:(一個直接函數,一個引用函數(該函數含一個引用函數newNode(int x)) //構建
node* create(int data[],int n){ //插入一組數據,這組數據有n個數 Node* node=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 rootl
} void deleteNode(Node* &root,int x){if(root==NULL) return;if(root->data==x){ //找到了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 if(root->rchild!=NULL){Node* next=findMin(root->rchild); //查找右子樹中的最小值root->data=next->data;deleteNode(root->rchild,next->data); //查找該結點的右子樹,并刪除那個結點 } }else if(root->data>x){ //根結點大于x,向左查找 deleteNode(root->lchild,x); }else{ //根結點小于x,向左查找 deleteNode(root->rchild,x);}
} ?
總結
以上是生活随笔為你收集整理的【二叉查找树BST】二叉查找树的基本操作总结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。