日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天勤数据结构高分笔记二叉排序树的实现

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天勤数据结构高分笔记二叉排序树的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼為天勤數據結構高分筆記查找一章二叉排序樹
其下為具體的插入,刪除,查找,遍歷的實現與運行

#include<stdio.h> #include<stdlib.h>//二叉排序樹的存儲結構 typedef struct BTNode{int key;struct BTNode *lchild,*rchild; }BTNode; //查找關鍵字算法 BTNode* BSTSearch(BTNode *bt,int key){if(bt==NULL)return NULL;//空指針則返回空,查找不成功else{if(bt->key==key)return bt;//等于根節點,查找成功,返回關鍵字所在的節點指針 else if(bt->key>key)//小于根節點的關鍵字到左子樹查找 return BSTSearch(bt->lchild,key);else //大于根節點的關鍵字到右子樹查找 return BSTSearch(bt->rchild,key); } } //刪除函數 int Delete(BTNode *&bt){BTNode *q,*s;//情況1 結點p本身為葉子節點,直接刪除即可if(!bt->lchild&&!bt->rchild)bt=NULL;else if(!bt->lchild){//左子樹為空,只需用結點p的右子樹根代替結點p即可 q=bt;bt=bt->rchild;free(q);} else if(!bt->rchild){//右子樹為空,只需用結點p的左子樹根代替結點p即可 q=bt;bt=bt->lchild;free(q);} else{//左右子樹都不空,采用第2種方式 q=bt;s=bt->lchild;//遍歷,找到結點p的直接前驅while(s->rchild){q=s;s=s->rchild;} //直接改變結點p的值bt->key=s->key;//判斷節點p的左子樹 s是否有右子樹,分兩種情況討論if(q!=bt)q->rchild=s->lchild;//若有,則在刪除直接前驅結點的同時,令前驅的左孩子結點改為q指向結點的孩子結點elseq->lchild=s->lchild;free(s);}return 1; } //刪除關鍵字 成功返回1,失敗返回0 int DeleteBST(BTNode *&bt,int key){if(!bt)//不存在關鍵字等于key的數據元素 return 0; else{if(key==bt->key){Delete(bt);return 1;}else if(bt->key>key)return DeleteBST(bt->lchild,key);elsereturn DeleteBST(bt->rchild,key); } } //插入關鍵字算法 成功返回1 失敗返回0 int BSTInsert(BTNode *&bt,int key){ //因為bt要改變,故要使用引用型 if(bt==NULL)//當前為空指針說明找到插入位置,創建新節點進行插入{bt=(BTNode *)malloc(sizeof(BTNode));//創建新節點bt->lchild=bt->rchild=NULL;bt->key=key;//將待插入關鍵字存入新節點 return 1; }else{//如果結點不空,查找待插入位置 if(bt->key==key)//關鍵字已存在 ,插入失敗返回0return 0;else if(bt->key>key)//小于根節點的關鍵字到左子樹查找return BSTInsert(bt->lchild,key);else //大于根節點的關鍵字到右子樹查找 return BSTInsert(bt->rchild,key);} }//二叉排序樹的構建 void CreateBST(BTNode *&bt,int key[],int n){bt=NULL;//將樹清空for(int i=0;i<n;i++)BSTInsert(bt,key[i]); } //先序輸出 詳細看天勤數據結構142頁 void Order(BTNode *bt){if(bt==NULL)return ;printf("%d ",bt->key);Order(bt->lchild);Order(bt->rchild); } int main(){int key[]={9,1,2,3,6,5,8};BTNode *bt,*temp;CreateBST(bt,key,7);//創建二叉排序樹 Order(bt);temp=BSTSearch(bt,5); //查找關鍵字為5的結點 printf("\n%d\n",temp->key);DeleteBST(bt,5);//刪除關鍵字5的節點 Order(bt); return 0; }

總結

以上是生活随笔為你收集整理的天勤数据结构高分笔记二叉排序树的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。