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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

先序,中序,后序线索二叉树

發布時間:2024/4/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 先序,中序,后序线索二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//后序線索,這種方法不容易想到 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm>using namespace std;struct TREE{int val;TREE *ch[2];TREE *thread;//該節點的線索的下一個節點 TREE(){}TREE(int val){this->val = val;ch[0] = ch[1] = NULL;thread = NULL;} };void buildT(TREE * &T){int x;scanf("%d", &x);if(x == -1) return ;T = new TREE(x);buildT(T->ch[0]);buildT(T->ch[1]); }void postThread(TREE *T, TREE *pre){if(!T) return;postThread(T->ch[0], T);postThread(T->ch[1], T);if(pre){if(pre->ch[0] == T && pre->ch[1])//T是左子樹 T->thread = pre->ch[1]; //T的下一個節點就是它的兄弟節點 else //T是右子樹T->thread = pre;//T的下一個節點就是它 的父親節點 } }void printT_pre(TREE *T){//前序打印 if(!T) return ;printf("%d ", T->val);printT_pre(T->ch[0]);printT_pre(T->ch[1]); }void printT_Thread(TREE *T){//后序線索打印 TREE *root = T;bool flag = true;//表明T所在的字數沒有訪問過 while(1){while(flag && T->ch[0]) T = T->ch[0];printf("%d ", T->val);if(T->thread->ch[0] == T || T->thread->ch[1] == T)flag = false;//如果 T沒有兄弟節點了,就一直沿著它的父節點向上走 else flag = true;T = T->thread;if(T == root){//再次回到最頂端父節點時, 結束! printf("%d ", T->val); break;}} }int main(){TREE *T = NULL;buildT(T);printT_pre(T);printf("\n");postThread(T, NULL);printT_Thread(T);printf("\n");return 0; }


下面是基本按照同樣的套路實現二叉樹的先序,中序,后序的線索


//先序線索 #include<stdio.h> #include<stdlib.h> #define Thread 1 #define Tlink 0 typedef struct tree {int d;struct tree* lchild;struct tree* rchild;int Ltag, Rtag; }*TREE;void build_tree(TREE &T) {int d;scanf("%d", &d);if(d!=-1){T=(TREE)malloc(sizeof(tree));T->d=d;T->lchild=T->rchild=NULL;T->Ltag=T->Rtag=Tlink;build_tree(T->lchild);build_tree(T->rchild);} } TREE pre;void preThread_tree(TREE p) {if(p){if(!p->lchild){p->lchild=pre;p->Ltag=Thread;}if(!pre->rchild){pre->rchild=p;pre->Rtag=Thread;}pre=p;if(p->Ltag==Tlink)//考慮到只有一個結點或兩個節點情況, preThread_tree(p->lchild);//如果沒有 if語句可能出現死循環 if(p->Rtag==Tlink)preThread_tree(p->rchild);} }void print_preThr_tree(TREE T) {TREE p=T;while(1){ while(p->Ltag==Tlink){printf("%d ", p->d);p=p->lchild;}printf("%d ", p->d);p=p->rchild;if(p==T) break;while(p->Rtag==Thread){printf("%d ", p->d);p=p->rchild;}} }void print_tree(TREE T) {if(T){printf("%d ", T->d);print_tree(T->lchild);print_tree(T->rchild);} }int main() {TREE T=NULL;build_tree(T);print_tree(T);//遞歸先序遍歷 printf("\n"); pre=T;preThread_tree(T);//非遞歸先序遍歷 pre->rchild=T;print_preThr_tree(T);return 0; }

//中序線索 #include<stdio.h> #include<stdlib.h> #define Thread 1 #define Tlink 0 typedef struct tree {int d;struct tree* lchild;struct tree* rchild;int Ltag, Rtag; }*TREE;void build_tree(TREE &T) {int d;scanf("%d", &d);if(d!=-1){T=(TREE)malloc(sizeof(tree));T->d=d;T->lchild=T->rchild=NULL;T->Ltag=T->Rtag=Tlink;build_tree(T->lchild);build_tree(T->rchild);} } TREE pre;void inorThread_tree(TREE p) {if(p){if(p->Ltag==Tlink)//當只有一個結點的時候,要加上這句話 inorThread_tree(p->lchild);if(!p->lchild){p->lchild=pre;p->Ltag=Thread;}if(!pre->rchild){pre->rchild=p;pre->Rtag=Thread;}pre=p;if(p->Rtag==Tlink)inorThread_tree(p->rchild);} }/* 上述代碼可以簡化如下,pre的初值為NULL就好   void inorThread_tree(TREE p) {if(p){ inorThread_tree(p->lchild);if(!p->lchild){p->lchild=pre;p->Ltag=Thread;}if(pre && !pre->rchild){pre->rchild=p;pre->Rtag=Thread;}pre=p; inorThread_tree(p->rchild);} } */void print_tree(TREE T){if(T){print_tree(T->lchild);printf("%d ", T->d);print_tree(T->rchild);} }void print_inorThr_tree(TREE T) {TREE p=T;while(1){while(p->Ltag==Tlink)p=p->lchild;printf("%d ", p->d);while(p->Rtag==Thread){p=p->rchild;printf("%d ", p->d);}p=p->rchild;if(p==T)break;} }int main() {TREE T=NULL;build_tree(T);print_tree(T);//遞歸中序遍歷 printf("\n"); pre=T;inorThread_tree(T);//非遞歸中序遍歷 pre->rchild=T;pre->Rtag=0;//保證只有一個結點的情況 print_inorThr_tree(T);return 0; }


//后序線索 #include<stdio.h> #include<stdlib.h> #define Thread 1 #define Tlink 0 typedef struct tree {int d;struct tree* lchild;struct tree* rchild;struct tree* rrchild;int Ltag, Rtag; }*TREE;void build_tree(TREE &T) {int d;scanf("%d", &d);if(d!=-1){T=(TREE)malloc(sizeof(tree));T->d=d;T->lchild=T->rchild=NULL;T->Ltag=T->Rtag=Tlink;build_tree(T->lchild);build_tree(T->rchild);} } TREE pre;void postThread_tree(TREE p) {if(p){if(p->Ltag==Tlink)postThread_tree(p->lchild);if(p->Rtag==Tlink)postThread_tree(p->rchild);if(!p->lchild){p->lchild=pre;p->Ltag=Thread;}if(!pre->rchild ){pre->rchild=p;pre->Rtag=Thread;} else {pre->rrchild=p;}pre=p;} }void print_postThr_tree(TREE T) {TREE p=T;while(p->Ltag==Tlink)p=p->lchild;while(1){ printf("%d ", p->d);if(p==T)break; if(p->Rtag == Thread)p=p->rchild;else p=p->rrchild;} }void print_tree(TREE T) {if(T){print_tree(T->lchild);print_tree(T->rchild);printf("%d ", T->d);} }int main() {TREE T=NULL;build_tree(T);print_tree(T);//遞歸后序遍歷 printf("\n"); pre=T;postThread_tree(T);//非遞歸后序遍歷 pre->rchild=T;pre->Rtag = Thread; print_postThr_tree(T); return 0; }

總結

以上是生活随笔為你收集整理的先序,中序,后序线索二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 一本大道一区二区 | 欧美一区不卡 | 一级黄色片在线 | 国精产品乱码一区一区三区四区 | 激情六月色| 免费日韩成人 | 不卡一区二区在线 | 91久久精品一区二区 | 亚洲精品视频一二三区 | 成人精品久久久 | 黄色小视频免费在线观看 | 国产精品99久久免费黑人人妻 | 精品+无码+在线观看 | 欧美极品在线 | 天堂网av手机版 | 国产超碰精品 | 找av导航| 亚洲性视频网站 | 国产一区激情 | 日韩av无码一区二区三区不卡 | 亚洲最大看欧美片网站 | 亚洲天堂自拍 | 夜夜看| 精品欧美一区二区久久久 | 伊人久久青青 | 精品日韩在线观看 | 我的丝袜美腿尤物麻麻 | 国产馆视频 | 亚洲午夜久久久久久久久久久 | 精品999久久久一级毛片 | 亚洲无人区码一码二码三码的含义 | 毛片综合 | 在线观看精品视频 | 福利片av| 日本乱偷中文字幕 | 色眯眯影院 | 波多野结av衣东京热无码专区 | 亚洲视频在线一区 | 99免费 | 90岁肥老奶奶毛毛外套 | 啪啪的网站| 美日韩精品一区二区 | 天天干网 | 亚洲一区二区三区影院 | 精品中文字幕一区 | 欧美图片一区 | 爱搞逼综合 | 日操干 | 超碰天天| 成熟了的熟妇毛茸茸 | 天天草综合 | 在线观看黄 | 青草视频网 | 亚洲精品久久久久久久蜜桃 | 国产精品久久久久久免费播放 | 亚洲色图综合网 | 成人黄色免费看 | 伊人网综合网 | 69久久成人精品 | 中文字幕久久熟女蜜桃 | 精彩毛片 | 小草av在线 | 青青国产视频 | 国内精品偷拍 | 少妇人禽zoz0伦视频 | 亚洲精选久久久 | 男人综合网 | 成人小视频免费观看 | 91黄色免费版 | 综合网五月 | 一区二区视频在线 | 视频免费在线 | 亚洲Av无码成人精品区伊人 | 亚洲AV无码乱码国产精品色欲 | 一区二区精品国产 | 色综合久久久无码中文字幕波多 | 亚洲专区在线 | 成人免费视频国产 | av免费网| 在线国产三级 | 超碰按摩| 激情婷婷在线 | a中文在线 | 亚洲av无码一区二区三区在线 | a级大片在线观看 | 国产亚洲av片在线观看18女人 | 亚洲三级在线播放 | 日本一区二区三区四区视频 | 朱竹清到爽高潮痉挛 | 欧美精品黄 | 在线观看av网站 | 激情亚洲色图 | 青青草av在线播放 | 超碰影院在线 | 97久久国产精品 | 嫦娥性艳史bd | a天堂在线视频 | 亚洲激情视频在线播放 | 中国少妇无码专区 |