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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

代碼為天勤數(shù)據(jù)結(jié)構(gòu)高分筆記查找一章二叉排序樹
其下為具體的插入,刪除,查找,遍歷的實(shí)現(xiàn)與運(yùn)行

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。