亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言 數據結構之中序二叉樹實例詳解

2020-01-26 14:16:59
字體:
來源:轉載
供稿:網友

C語言數據結構 中序二叉樹

前言:

線索二叉樹主要是為了解決查找結點的線性前驅與后繼不方便的難題。它只增加了兩個標志性域,就可以充分利用沒有左或右孩子的結點的左右孩子的存儲空間來存放該結點的線性前驅結點與線性后繼結點。兩個標志性域所占用的空間是極少的,所有充分利用了二叉鏈表中空閑存的儲空間。

   要實現線索二叉樹,就必須定義二叉鏈表結點數據結構如下(定義請看代碼):

left

leftTag

data

rightTag

right

說明:

1.       leftTag=false時,表示left指向該結點的左孩子;

2.       leftTag=true時,表示left指向該結點的線性前驅結點;

3.       rightTag=false時,表示right指向該結點的右孩子;

4.       rightTag=true時,表示right指向該結點的線性后繼結點;

     以二叉鏈表結點數據結構所構成的二叉鏈表作為二叉樹的存儲結構,叫做線索二叉鏈表;指向結點的線性前驅或者線性后繼結點的指針叫做線索;加上線索的二叉樹稱為線索二叉樹;對二叉樹以某種次序遍歷將其變為線索二叉樹的過程叫做線索化。

中序次序線索化二叉樹算法:

  中序次序線索化是指用二叉鏈表結點數據結構建立二叉樹的二叉鏈表,然后按照中序遍歷的方法訪問結點時建立線索;(具體看代碼)

檢索中序二叉樹某結點的線性前驅結點的算法:

1.       如果該結點的leftTag=true,那么left就是它的線性前驅;

2.       如果該結點的leftTag=false,那么該結點左子樹最右邊的尾結點就是它的線性前驅點;

(具體請看代碼)

檢索中序二叉樹某結點的線性后繼結點和算法:

1.       如果該結點的right=true,那么right就是它的線性后繼結點;

2.       如果該結點的right=false,那么該結點右子樹最左邊的尾結點就是它的線性后繼結點

(具體請看代碼)


圖:后繼線索


圖:前驅線索

 節點定義:

struct Node {   int data;   bool leftTag;   bool rightTag;   Node* left;   Node* right;   Node(int _data):data(_data),left(0),right(0),leftTag(false),rightTag(false){} }; 

類定義:

class BinaryTree { private:   Node* root; private:   Node* head;   Node* pre;   void makeThread(Node* node); public:   void buildThread();   void traverseBySuccessor();   void traverseByPredecessor();  // helper methods private:   static inline bool visit(Node* T)   {     if (T)     {       printf("data:%c, left:%c, right:%c/n",         (char)T->data,         (T->left!=0) ? (char)T->left->data : '#',         (T->right!=0) ? (char)T->right->data : '#');       return true;     }     else return false;   } }; 

方法定義:

void BinaryTree::makeThread(Node* node) {   if (node!=NULL)   {     makeThread(node->left);     if (pre!= NULL)     {       if (pre->right==NULL) // 如果前驅節點的右子樹為空, 那么把前驅節點的右子樹用作線索       {         pre->rightTag = true;          pre->right = node;       }       else pre->rightTag = false;     }     if (node->left==NULL) // 如果當前結點的左子樹為空, 那么把當前結點的左子樹用作線索     {       node->leftTag = true;       node->left = pre;     }     else node->leftTag = false;     pre = node;     makeThread(node->right);   } }  void BinaryTree::traverseBySuccessor() {   Node* p = head->left; //first find the root node   // 親測表明 如果不使用head啞節點 就要設三道卡, 防止p訪問到NULL,    // 分別在主while處, 第二個visit處和下面的p=p->right處   while (p!=head)   {     while (!p->leftTag)       p = p->left;     visit(p);      while (p->rightTag && p->right!=head)     {       p = p->right;       visit(p);     }     p = p->right;   }   cout<<endl; }  void BinaryTree::traverseByPredecessor() {   Node* p = head->left; //first find the root node   while (p!=head)   {     while (!p->rightTag)       p = p->right;     visit(p);     if (p!=NULL)     {       while (p->leftTag && p->left!=head)       {         p = p->left;         visit(p);       }       p = p->left;     }   }   cout<<endl; }  void BinaryTree::buildThread() {   pre = NULL;   head = new Node('@');   head->left = root;   head->right = head;   makeThread(root);   // 經過了makeThread過程之后, pre必然指向中序遍歷最晚的結點.   // 把pre的右子樹指向head, 就構成了一個雙向循環鏈表   //   pre->rightTag = 1;   pre->right = head;   pre = NULL;   Node* p = root;   /*    * 在建立前驅線索的時候,最左邊的結點沒有和head結點連接。要在這里補上    */   while (p->left!=NULL)     p = p->left;   p->left = head; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
草民午夜欧美限制a级福利片| 国内精品久久久久| 久久久av亚洲男天堂| 亚洲人免费视频| 久久久久久久久久久免费精品| 亚洲精品720p| 亚洲欧美国内爽妇网| 68精品久久久久久欧美| 成人欧美在线观看| 中文字幕亚洲在线| 日韩中文字幕国产| 欧美性xxxx极品hd欧美风情| 欧美精品日韩www.p站| 国产精品免费电影| 欧美日韩性视频在线| 亚洲片国产一区一级在线观看| 久久琪琪电影院| 国产视频欧美视频| 色先锋久久影院av| 国产精品视频中文字幕91| 亚洲电影成人av99爱色| 欧美一性一乱一交一视频| 国产精品青青在线观看爽香蕉| 久久琪琪电影院| 日韩69视频在线观看| 久久精品成人欧美大片古装| 亚洲欧美自拍一区| 久久国产精品久久国产精品| 国产99久久精品一区二区永久免费| 欧美成人一二三| 亚洲免费av电影| 亚洲精品一区av在线播放| 亚洲欧美色婷婷| 成人做爰www免费看视频网站| 久久精品国产欧美亚洲人人爽| 亚洲国产精彩中文乱码av在线播放| 亚洲成人中文字幕| 亚洲最大福利视频网站| 日本精品视频在线播放| 国产亚洲精品久久久久久777| 日韩精品中文字幕视频在线| 国产精品成av人在线视午夜片| 亚洲精品二三区| 57pao国产精品一区| 精品久久中文字幕| 在线播放精品一区二区三区| 久久91亚洲精品中文字幕奶水| 亚洲成人性视频| 国产成人亚洲精品| 欧美美最猛性xxxxxx| 成人网在线视频| 欧美在线国产精品| 日韩欧美在线视频免费观看| 色樱桃影院亚洲精品影院| 97视频在线观看亚洲| 亚洲在线免费视频| 最近2019中文字幕在线高清| 欧美日韩性生活视频| 亚洲欧美三级伦理| 久久综合九色九九| 一区二区三区美女xx视频| 最新国产精品亚洲| 日韩电影中文字幕在线观看| 亚洲片国产一区一级在线观看| 久久国产加勒比精品无码| 懂色aⅴ精品一区二区三区蜜月| 91精品久久久久| 亚洲视频日韩精品| 欧美日韩国产成人在线观看| 国产精品自产拍在线观看| 伊人精品在线观看| 欧美专区在线播放| 日韩高清av在线| 美女视频久久黄| 欧美激情按摩在线| 国产成人自拍视频在线观看| 日韩在线播放视频| 国产精品久久久久aaaa九色| 97精品一区二区三区| 最近2019年好看中文字幕视频| 久久天天躁夜夜躁狠狠躁2022| 亚洲专区中文字幕| 9.1国产丝袜在线观看| 91网在线免费观看| 中文字幕亚洲欧美日韩在线不卡| 成人国产精品免费视频| 久久九九国产精品怡红院| 亚洲人成在线播放| 国产精品99久久久久久www| 日韩av免费在线看| 这里精品视频免费| 中文字幕av一区| 亚洲免费视频网站| 久久精品国产2020观看福利| 欧美日韩一区二区免费在线观看| 第一福利永久视频精品| 日韩欧美在线一区| 久久中文字幕一区| 精品国产91乱高清在线观看| 国产在线观看精品| 欧美激情中文字幕乱码免费| 国产精品久在线观看| 午夜精品视频网站| 国产精品久久久久久婷婷天堂| 欧美日韩国产999| 国产精品福利在线| 亚洲天堂成人在线| 视频在线观看99| 成人黄色av免费在线观看| 永久免费看mv网站入口亚洲| 中文字幕不卡av| 亚洲美女久久久| 亚洲成人精品视频在线观看| 成人福利视频在线观看| 国模私拍视频一区| 亚洲电影免费观看高清完整版在线| 久久精品国产2020观看福利| 欧美美女18p| 国产在线高清精品| 欧洲成人在线观看| 亚洲奶大毛多的老太婆| 国产一区二区三区精品久久久| 高清欧美电影在线| 久青草国产97香蕉在线视频| 91大神福利视频在线| 日韩久久午夜影院| 免费不卡欧美自拍视频| 国产国产精品人在线视| 国产成人精品在线播放| 欧美成年人视频网站欧美| 国产精品免费一区二区三区都可以| 久久影视电视剧免费网站清宫辞电视| 麻豆国产va免费精品高清在线| 97精品视频在线观看| 久久久久久尹人网香蕉| 欧美一区亚洲一区| 色999日韩欧美国产| 欧美激情亚洲自拍| 中日韩美女免费视频网址在线观看| 亚洲激情视频在线观看| 97免费在线视频| 人人澡人人澡人人看欧美| 最近2019年手机中文字幕| 91成人精品网站| 国产精品日韩久久久久| yellow中文字幕久久| 国产成人+综合亚洲+天堂| 在线精品视频视频中文字幕| 国产亚洲精品久久久优势| 在线成人一区二区| 隔壁老王国产在线精品| 日韩精品在线播放| 欧美在线影院在线视频| 亚洲开心激情网| 国产一区二区日韩| 欧美精品videos| 亚洲精品中文字幕有码专区| 日韩欧美aⅴ综合网站发布| 欧美精品精品精品精品免费| 国产做受高潮69| 日韩国产精品亚洲а∨天堂免| 国产欧美欧洲在线观看| 亚洲欧美日韩中文在线| 91久久嫩草影院一区二区|