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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

建立一颗二叉排序树,并删除该二叉排序树上的某个节点

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 建立一颗二叉排序树,并删除该二叉排序树上的某个节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設計并驗證如下算法:而擦函數采用二叉鏈表結構表示,按輸入的關鍵字序列建立一顆二叉排序樹,并刪除該二叉排序樹上的某個節點。

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n; typedef struct BiTNode {//樹節點的建立 TElemType data ;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,int key,BiTree f,BiTree &p){if(!T){p=f;return 0;}else if(key==T->data){p=T;return 1;}else if(key<T->data)return SearchBST(T->lchild,key,T,p);else return SearchBST(T->rchild,key,T,p); } int InsertBST(BiTree &T,TElemType e){BiTree p,s;if(!SearchBST(T,e,NULL,p)){s=(BiTree)malloc(sizeof(BiTNode));s->data=e;s->lchild=s->rchild=NULL;if(!p)T=s;else if(e<p->data)p->lchild=s;elsep->rchild=s;return 1;}elsereturn 0; } int CeateBiTree(BiTree &T)//創建樹 {TElemType ch;T=NULL;printf("請輸入整數序列構建二叉排序樹,以 0結束:\n");scanf("%d",&ch);while(ch!=0){// printf("請輸入整數序列構建二叉排序樹,以 0結束:\n");InsertBST(T,ch);printf("請輸入整數序列構建二叉排序樹,以 0結束:\n");scanf("%d",&ch);} } int Delete(BiTree &p){BiTree q,s;if(!p->rchild){q=p;p=p->lchild;free(q);}else if(!p->lchild){q=p;p=p->rchild;free(q);}else{q=p;s=p->lchild;while(s->rchild){q=s;s=s->rchild;}p->data=s->data;if(q!=p)q->rchild=s->lchild;elseq->lchild=s->lchild;Delete(s);}return 1;} int deleBiTreeData(BiTree &T,TElemType key) {int flag=1;if(!T)return 0;else{if(key==T->data){flag=0;return Delete(T);}else if(key<T->data)return deleBiTreeData(T->lchild,key);elsereturn deleBiTreeData(T->rchild,key);}if(flag){printf("你要刪除的結點值不存在:\n");} }int PreOrder(BiTree BT) {//遞歸先序遍歷 if(BT){if(!(BT->data))return 0;printf("%3d ",BT->data);PreOrder(BT->lchild) ;PreOrder(BT->rchild);return 1;} } int main(){BiTree BT;TElemType ch; CeateBiTree(BT);printf("創建二叉排序樹的先序遍歷:\n");PreOrder(BT);printf("請輸入你要刪除的結點值:\n");scanf("%d",&ch) ;deleBiTreeData(BT, ch);printf("刪除節點后二叉排序樹的先序遍歷:\n");PreOrder(BT);}

測試結果如下:

請輸入整數序列構建二叉排序樹,以 0結束: 45 請輸入整數序列構建二叉排序樹,以 0結束: 24 請輸入整數序列構建二叉排序樹,以 0結束: 53 請輸入整數序列構建二叉排序樹,以 0結束: 12 請輸入整數序列構建二叉排序樹,以 0結束: 37 請輸入整數序列構建二叉排序樹,以 0結束: 93 請輸入整數序列構建二叉排序樹,以 0結束: 0 創建二叉排序樹的先序遍歷:45 24 12 37 53 93 請輸入你要刪除的結點值: 24 刪除節點后二叉排序樹的先序遍歷:45 12 37 53 93

?

總結

以上是生活随笔為你收集整理的建立一颗二叉排序树,并删除该二叉排序树上的某个节点的全部內容,希望文章能夠幫你解決所遇到的問題。

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