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

首頁 > 編程 > C++ > 正文

C++基于遞歸和非遞歸算法判定兩個二叉樹結構是否完全相同(結構和數據都相同)

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

本文實例講述了C++基于遞歸和非遞歸算法判定兩個二叉樹結構是否完全相同。分享給大家供大家參考,具體如下:

/*兩個二叉樹結構是否相同(結構和數據都相同) -- 遞歸和非遞歸方法經調試可運行源碼及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉樹結點定義*/typedef struct BTreeNode{  char elem;  struct BTreeNode *pleft;  struct BTreeNode *pright;}BTreeNode;/*初始化二叉樹節點*/BTreeNode* btree_init(BTreeNode* &bt){  bt = NULL;  return bt;}/*先序創建二叉樹*/void pre_crt_tree(BTreeNode* &bt){  char ch;  cin >> ch;  if (ch == '#')  {    bt = NULL;  }  else  {    bt = new BTreeNode;    bt->elem = ch;    pre_crt_tree(bt->pleft);    pre_crt_tree(bt->pright);  }}/*遞歸方式:如果兩個二叉樹proot都為空樹,則自然相同,返回true;如果兩個二叉樹proot一個為空樹,另一個不為空樹,則不相同,返回false;如果兩個二叉樹的數據不相等,返回false;如果兩個二叉樹都不為空樹,則需要分別比較左右子樹后,根據比較結果共同判定,只要有一個為false,則返回false。*//*遞歸判斷兩個二叉樹是否相等(結構和數據)*/bool bitree_compare(BTreeNode* proot1, BTreeNode* proot2){  if (proot1 == NULL && proot2 == NULL)//都為空    return true;  if((proot1 != NULL && proot2 == NULL) ||    (proot1 == NULL && proot2 != NULL))//一個空,一個非空    return false;  /*比較元素*/  if(proot1->elem != proot2->elem)    return false;  bool left_compare = bitree_compare(proot1->pleft, proot2->pleft);  bool right_compare = bitree_compare(proot1->pright, proot2->pright);  return (left_compare && right_compare);}/*非遞歸方式借助隊列實現實現算法:首先將給定根節點proot1和proot2都入隊第一步:當兩個隊列未空時,分別獲取兩個樹的當前層次中節點總數(即當前隊列中節點個數),    先比較節點個數是否相同,如果不相同,則兩個樹自然不同;    如果節點個數相同,需要出隊進行比較(數據也要比較)。如果有一個隊列未空,則退出比較。第二步:如果有一個隊列未空,則清空隊列并返回不同。*//*非遞歸方式判斷兩個二叉樹是否相等(僅僅結構)*/bool bitree_compare_leveltraverse(BTreeNode* proot1, BTreeNode* proot2){  if (proot1 == NULL && proot2 == NULL)//都為空    return true;  queue <BTreeNode*> que1;  queue <BTreeNode*> que2;  que1.push(proot1);  que2.push(proot2);  int cur_level_nodes_num1 = 0;  int cur_level_nodes_num2 = 0;  bool flag = true;  while (!que1.empty() && !que2.empty())  {    cur_level_nodes_num1 = que1.size();    cur_level_nodes_num2 = que2.size();    //節點數目不一樣時flag設為false,退出循環    if (cur_level_nodes_num1 != cur_level_nodes_num2)    {      flag = false;      break;    }    int cur_level_node_count1 = 0;    int cur_level_node_count2 = 0;    while (cur_level_node_count1 < cur_level_nodes_num1 &&        cur_level_node_count2 < cur_level_nodes_num2)    {      ++cur_level_node_count1;      ++cur_level_node_count2;      proot1 = que1.front();      que1.pop();      proot2 = que2.front();      que2.pop();      /*元素數據比較*/      if(proot1->elem != proot2->elem)      {        flag = false;        break;      }      //判斷左右孩子是否相同,不同肯定結構不相同,提前break      if( proot1->pleft == NULL && proot2->pleft != NULL  ||        proot1->pleft != NULL && proot2->pleft == NULL  ||        proot1->pright == NULL && proot2->pright != NULL ||        proot1->pright != NULL && proot2->pright == NULL)      {        flag = false;        break;      }      /*下一層的節點入隊*/      if(proot1->pleft)        que1.push(proot1->pleft);      if(proot1->pright)        que1.push(proot1->pright);      if(proot2->pleft)        que2.push(proot2->pleft);      if(proot2->pright)        que2.push(proot2->pright);    }    if(flag == false)      break;  }  if(flag == false)  {    while(!que1.empty())      que1.pop();    while(!que2.empty())      que2.pop();    cout << "非遞歸:reslut is false." << endl;    return false;  }else  {    cout << "非遞歸:reslut is true." << endl;    return true;  }  return true;}int main(){  BTreeNode *bt1;  BTreeNode* bt2;  bool flag;  btree_init(bt1);//初始化根節點  btree_init(bt2);//初始化根節點  cout << "creat 1th tree:" << endl;  pre_crt_tree(bt1);//創建二叉樹  cout << "creat 2th tree:" << endl;  pre_crt_tree(bt2);//創建二叉樹  /*遞歸測試*/  flag = bitree_compare(bt1, bt2);  if(flag == true)    cout<< "遞歸:result is true." << endl;  else    cout << "遞歸:result is false." << endl;  /*非遞歸測試*/  bitree_compare_leveltraverse(bt1, bt2);  system("pause");  return 0;}
/*測試結果如下:creat 1th tree:a b c # # # d e # # f # g # #creat 2th tree:a b c # # # d e # # f # g # #遞歸:result is true.非遞歸:reslut is true.請按任意鍵繼續. . .------------------分界線-----------------------creat 1th tree:a b c # # # d # #creat 2th tree:a b c # # # x # #遞歸:result is false.非遞歸:reslut is false.請按任意鍵繼續. . .本例創建的二叉樹形狀:a b c # # # d e # # f # g # # 如下:    a  b    dc     e  f       ga b c # # # d # # 如下:    a  b    dca b c # # # x # # 如下:    a  b    xc*/

希望本文所述對大家C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产精品日韩| 91免费综合在线| 成人午夜小视频| 欧美成人精品影院| 亚洲精品v天堂中文字幕| 色yeye香蕉凹凸一区二区av| 日韩精品中文字幕有码专区| 国外日韩电影在线观看| 国产精品久久久久一区二区| 欧美日韩国产丝袜另类| 美日韩精品免费视频| 欧美激情在线狂野欧美精品| 欧美老妇交乱视频| 深夜福利日韩在线看| 日韩美女视频免费在线观看| 亚洲激情电影中文字幕| 成人h猎奇视频网站| 日韩在线视频免费观看| 国产成人精品一区二区在线| 亚洲女人初尝黑人巨大| 国产成人在线精品| 色狠狠av一区二区三区香蕉蜜桃| 热久久99这里有精品| 免费av在线一区| 日韩电影第一页| 91av免费观看91av精品在线| 欧美午夜丰满在线18影院| 亚州欧美日韩中文视频| 欧美国产日韩中文字幕在线| 成人h视频在线观看播放| 亚洲综合在线小说| 久久露脸国产精品| 日韩一区av在线| 欧美剧在线观看| 国产精品www色诱视频| 亚洲欧美在线免费| 久久午夜a级毛片| 精品久久中文字幕| 成人在线一区二区| 尤物九九久久国产精品的特点| 日本韩国欧美精品大片卡二| 日韩一区视频在线| 国产精品高清免费在线观看| 国产成人av在线| 欧美日韩国产成人| 亚洲最大的网站| 日韩久久精品成人| 主播福利视频一区| 91在线视频九色| 亚洲视频在线免费观看| 欧美猛男性生活免费| 国内精品国产三级国产在线专| 九九久久久久久久久激情| 亚洲国产99精品国自产| 深夜福利国产精品| 青青久久av北条麻妃海外网| 国产日韩精品电影| 欧美亚洲视频在线观看| 亚洲欧美激情四射在线日| 韩日精品中文字幕| 亚洲精品永久免费| 国产精品视频久久久久| 中文字幕亚洲一区二区三区五十路| 性色av一区二区咪爱| 日韩综合视频在线观看| 57pao成人永久免费视频| 成人h猎奇视频网站| 亚洲精品v欧美精品v日韩精品| 欧美日韩性视频| 亚洲美女中文字幕| 日韩欧美精品免费在线| 欧美激情图片区| 91在线观看免费网站| 成人久久18免费网站图片| 亚洲精品成人久久久| 亚洲欧美激情另类校园| 欧洲s码亚洲m码精品一区| 日韩激情av在线播放| 97视频在线观看免费高清完整版在线观看| 亚洲国产私拍精品国模在线观看| 久久免费视频这里只有精品| 日韩国产高清污视频在线观看| 久久91精品国产| 久久久久久国产| 亚洲xxxx视频| 2021久久精品国产99国产精品| 欧美亚洲国产精品| 亚洲第一国产精品| 日韩在线小视频| 亚洲天堂网在线观看| 伦伦影院午夜日韩欧美限制| 欧美激情xxxx| 国产91精品视频在线观看| 国产丝袜一区二区三区免费视频| 一本一本久久a久久精品牛牛影视| 国产精品久久久久久久久久新婚| 国产丝袜一区二区三区免费视频| 日韩精品亚洲元码| 久久精品国产亚洲精品2020| 久久视频在线免费观看| 精品视频偷偷看在线观看| 亚洲人成免费电影| 欧美一级免费视频| 亚洲**2019国产| 欧美亚洲午夜视频在线观看| 日韩亚洲国产中文字幕| 亚洲xxx自由成熟| 国产精品美乳一区二区免费| 亚洲精品一区中文| 97国产精品人人爽人人做| 中文字幕亚洲综合| 精品国产一区av| 亚洲欧美激情另类校园| 国产91对白在线播放| 青青草原成人在线视频| 欧美超级免费视 在线| 欧美日韩国产va另类| 国产精品pans私拍| 亚洲午夜未满十八勿入免费观看全集| 国产精品99久久久久久www| 欧美午夜精品久久久久久人妖| 精品国产乱码久久久久久天美| 亚洲国产成人精品女人久久久| 欧美一级大片在线免费观看| 91啪国产在线| 91久久久国产精品| 欧美精品一本久久男人的天堂| 久久久久久成人精品| 久久久久日韩精品久久久男男| 在线日韩中文字幕| 欧洲成人在线观看| 91精品中国老女人| 高跟丝袜一区二区三区| 亚洲欧美国产视频| 欧美在线一区二区三区四| 亚洲成人久久久| 久久噜噜噜精品国产亚洲综合| 中文亚洲视频在线| 神马久久桃色视频| 国产视频精品一区二区三区| 成人乱人伦精品视频在线观看| 欧美激情日韩图片| 91精品久久久久久久| 日韩av电影中文字幕| 日本精品一区二区三区在线播放视频| 日韩免费观看在线观看| 国产精品香蕉国产| 成人美女av在线直播| 国产一区二中文字幕在线看| 亚洲一区亚洲二区亚洲三区| 国产精品一区二区三| 69国产精品成人在线播放| 亚洲国产欧美一区二区三区同亚洲| 视频直播国产精品| 久久精品91久久香蕉加勒比| 久久久免费高清电视剧观看| 欧美一级电影在线| 国产精品电影久久久久电影网| 国产精品视频男人的天堂| 精品国内亚洲在观看18黄| 久久伊人精品视频| 亚洲福利视频二区| 91精品在线国产| 久色乳综合思思在线视频|