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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构之线索二叉树

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之线索二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線索二叉樹

  • 思維導圖:
  • 線索二叉數的引入:
  • 線索二叉樹:
    • 前序遍歷的線索二叉樹:
    • 中序遍歷的線索二叉樹(常):
    • 后序遍歷的線索二叉樹:
  • 線索二叉樹的節點結構:
  • 中序線索二叉樹代碼實現
    • 中序線索二叉樹的構造:
    • 中序線索二叉樹的遍歷以及找節點p的后序節點:
    • 中序線索二叉樹的逆遍歷以及找節點p的前驅節點:
  • 先序線索二叉樹代碼實現
    • 先序線索二叉樹的構造:
    • 先序線索二叉樹的遍歷以及找節點p的后序節點:
    • 先序線索二叉樹的逆遍歷以及找節點p的前驅節點:
  • 后序線索二叉樹代碼實現
    • 后序線索二叉樹的構造:
    • 后序線索二叉樹的遍歷以及找節點p的后序節點:
    • 后序線索二叉樹的遍歷以及找節點p的前驅節點:
  • 總結:

思維導圖:

線索二叉數的引入:

先來看這樣幾個問題:
1、普通二叉樹只有指向孩子節點的指針而沒有指向雙親節點的指針,這樣就會產生一個問題,無法方便快速的找到某一節點的雙親節點
2、當我們不知道根節點的指針,而是知道某一節點(非根節點)指針,就無法對二叉樹進行遍歷

我們知道,用鏈式存儲二叉樹時,會產生n+1個空指針,我們是否可以利用這些空指針而很方便的實現上述的兩種操作呢?
為此,我們引入線索二叉樹的概念。

線索二叉樹:

在實現一顆二叉樹時,會產生空指針,個數為n+1個,若節點無左子樹,將指針指向前驅節點;若無右子樹,將指針指向后繼節點,從而實現線索化,將加上線索的二叉樹稱為線索二叉樹。即:
1、若無左子樹,將指針指向前驅節點
2、若無右子樹,將指針指向后繼節點

前序遍歷的線索二叉樹:

ps: 由遍歷序列得到圖

中序遍歷的線索二叉樹(常):

后序遍歷的線索二叉樹:

線索二叉樹的節點結構:

例如:

typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag; }ThreadNode , *ThreadTree;

中序線索二叉樹代碼實現

中序線索二叉樹的構造:

原理:

找前驅節點:
若左指針為線索,則其指向節點為前驅節點
若左指針為左孩子,則其左子樹的最右側節點為前驅節點
找后繼節點:
若右指針為線索,則其指向節點為后繼節點
若右指針為右孩子,則其右子樹的最左側節點為后繼節點

代碼實現:

void InThread(ThreadTree &p){if(p != NULL){InThread(p->lchild);visit(T);InThread(p->rchild);} } void visit(ThreadNode *p){if(p->lchild == NULL){p->lchild = pre;p->ltag = 1;}if(pre != NULL && pre->rchild == NULL){pre->rchild = p;pre->rtag = 1;}pre = p; }void CreateInThread(ThreadTree T){ThreadTree pre = NULL;if(T != NULL){InThread(T,pre);if(pre->rchild == NULL)pre->rtag = 1;} }

中序線索二叉樹的遍歷以及找節點p的后序節點:

1、找到以p為根的子樹中,第一個被中序遍歷的節點
2、在中序線索二叉樹中找到節點p的后繼節點
3、實現對二叉樹的中序遍歷

//找到以p為根的子樹中,第一個被中序遍歷的節點 ThreadNode *Fristnode(ThreadNode *p){//循環找到最左下節點,不一定是葉節點while(p->ltag == 0)p = p->lchild;return p; } //在中序線索二叉樹中找到節點p的后繼節點 ThreadNode *Nextnode(ThreadNode *p){if(p->rtag == 0)return Firstnode(p->rchild);elsereturn p->rchild; } //上面兩個函數實現了找到指定節點p的中序后繼,下面的函數實現對二叉樹的中序遍歷 //利用線索實現的惡非遞歸算法,空間復雜的o(1) void Inorder(ThreadNode *T){for(ThreadNode *p = Firstnode(T);p != NULL;p = Nextnode(p))visit(p); }

中序線索二叉樹的逆遍歷以及找節點p的前驅節點:

//找到以p為根的子樹中,最后一個被中序遍歷的節點 ThreadNode *Lastnode(ThreadNode *p){//循環找到最左下節點,不一定是葉節點while(p->rtag == 0)p = p->rchild;return p; } //在中序線索二叉樹中找到節點p的前驅節點 ThreadNode *Prenode(ThreadNode *p){if(p->ltag == 0)return Lasttnode(p->lchild);elsereturn p->lchild; } //上面兩個函數實現了找到指定節點p的中序后繼,下面的函數實現對二叉樹的逆中序遍歷 //利用線索實現的惡非遞歸算法,空間復雜的o(1) void Revorder(ThreadNode *T){for(ThreadNode *p = Lastnode(T);p != NULL;p = Prenode(p))visit(p); }

先序線索二叉樹代碼實現

先序線索二叉樹的構造:

代碼實現:

void PreThread(ThreadTree &p){if(p != NULL){visit(p);//當處理完p節點后會訪問p->lchild,但是經過visit(P)后p->lchild就會指向p的前驅節點,所以要對其進行判斷if(T->ltag == 0) //lchild不是前驅線索 PreThread(p->lchild);PreThread(p->rchild);} } void visit(ThreadNode *p){if(p->lchild == NULL){p->lchild = pre;p->ltag = 1;}if(pre != NULL && pre->rchild == NULL){pre->rchild = p;pre->rtag = 1;}pre = p; }void CreateInThread(ThreadTree T){ThreadTree pre = NULL;if(T != NULL){InThread(T,pre);if(pre->rchild == NULL)pre->rtag = 1;} }

先序線索二叉樹的遍歷以及找節點p的后序節點:

先序線索二叉樹的逆遍歷以及找節點p的前驅節點:

ps:在只有指向孩子節點的節點結構中無法找到前驅
解決:增加一個指向雙親節點的指針

后序線索二叉樹代碼實現

后序線索二叉樹的構造:

代碼實現:

void PostThread(ThreadTree &p){if(p != NULL){PostThread(p->lchild);PostThread(p->rchild);visit(T);} } void visit(ThreadNode *p){if(p->lchild == NULL){p->lchild = pre;p->ltag = 1;}if(pre != NULL && pre->rchild == NULL){pre->rchild = p;pre->rtag = 1;}pre = p; }void CreateInThread(ThreadTree T){ThreadTree pre = NULL;if(T != NULL){InThread(T,pre);if(pre->rchild == NULL)pre->rtag = 1;} }

后序線索二叉樹的遍歷以及找節點p的后序節點:

后序線索二叉樹的遍歷以及找節點p的前驅節點:

ps:在只有指向孩子節點的節點結構中無法找到前驅
解決:增加一個指向雙親節點的指針

總結:

總結

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

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

主站蜘蛛池模板: 一区二区三区视频播放 | 青青国产在线视频 | 一线毛片 | 中文字幕日产乱码中 | 一区二区精品在线 | 超碰97在线资源站 | 亚洲福利一区二区三区 | 精品熟妇视频一区二区三区 | 国产精品一区二区入口九绯色 | 老司机午夜免费精品视频 | 久久久精品人妻一区二区三区四 | www.五月婷婷.com | av日韩国产 | 中文字幕色网 | 久久视频在线免费观看 | 欧美色爽 | 免费黄色看片网站 | 美女又黄又免费 | 国产依人 | 精品一区二区三区免费观看 | 日批视频在线播放 | 影音av在线| 色www国产亚洲阿娇 自拍一区在线 | 美国性生活大片 | 欧美视频一区在线观看 | 色先锋影院 | 特级淫片裸体免费看 | 成人黄色国产 | 久久久久久久久97 | 日韩欧av | 精品国产综合区久久久久久 | 91av久久久| 婷婷色六月 | av在线a | 97在线免费观看视频 | 国产视频精品视频 | 蜜桃一区二区三区 | 超碰激情在线 | 韩日免费av | 一区二区激情视频 | 视频丨9l丨白浆 | 天天撸天天操 | 欧美精品二区三区四区免费看视频 | 日日摸夜夜添狠狠添久久精品成人 | 色呦呦影院 | 国产一二三在线观看 | 日本妇女毛茸茸 | 看全色黄大色黄大片大学生 | www.777奇米| 亚洲精品在线免费看 | 日日夜夜免费 | 欧美久久成人 | 国产白丝一区二区三区 | 久久精品9 | 日韩播放| 91精品国产高清一区二区三区蜜臀 | 欧美精品色视频 | 国产精品男人的天堂 | 白丝一区 | 亚洲色图另类 | 美女精品| 久久久久免费精品 | 6680新视觉电影免费观看 | 性高潮久久久久久 | 国产香蕉视频 | 丨国产丨调教丨91丨 | heyzo在线播放 | 香蕉视频黄色在线观看 | 樱桃av | 亚洲精品乱码久久久久久9色 | 欧美色国| 亚洲无码国产精品 | 美女洗澡隐私免费网站 | 亚洲成a人片 | 九月婷婷| 韩国中文字幕hd久久精品 | 99久久久无码国产精品免费蜜柚 | 国产日韩精品一区二区三区 | 丰满人妻一区二区三区53视频 | 中文在线观看视频 | 好男人www日本 | 成人在线视屏 | 国产乱人伦app精品久久 | 五月天婷婷激情 | 国产精品夜夜爽张柏芝 | 国产一区二区三区精品愉拍 | 亚洲乱码国产乱码精品精的特点 | 久久久久免费观看 | 欧美性生活在线视频 | 饥渴丰满的少妇喷潮 | 91大神在线免费观看 | 午夜性色福利影院 | 黄色茄子视频 | 国产精品.xx视频.xxtv | 国产美女又黄又爽又色视频免费 | 91国在线观看 | 小嫩女直喷白浆 | 国产suv精品一区二区60 | 国产精品电影一区二区 |