最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

判斷兩顆二叉樹是否相似的兩種方法

 更新時(shí)間:2019年03月05日 15:56:16   作者:BLSxiaopanlaile  
今天小編就為大家分享一篇關(guān)于判斷兩顆二叉樹是否相似的兩種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

名稱:判斷兩個(gè)二叉樹是否相似

說明:此處的兩個(gè)方法一個(gè)是非遞歸,一個(gè)是遞歸算法。其實(shí)兩個(gè)算法的本質(zhì)思路是一樣的就是,判斷位置相同的兩個(gè)結(jié)點(diǎn)是否同時(shí)為空或同時(shí)不為空。只是具體的實(shí)現(xiàn)不一樣。

對(duì)于層次遍歷法:此處不小心用錯(cuò)了,本應(yīng)該用隊(duì)列來當(dāng)作排列下一層元素的。歪打正著,此處用棧也可以,只是判斷的結(jié)點(diǎn)順序不一樣。隊(duì)列的話,是從每一層的左端到右端。棧的話,是從右端到左端。在此處都沒影響。我去,有發(fā)現(xiàn)一點(diǎn),要從右到左訪問一層的元素的話,應(yīng)該用棧。

對(duì)于遞歸,看起來比非遞歸要簡單不少?;镜乃悸泛芎唵?,要注意的是,在程序需要從子樹接收返回是否相似的信息。這樣的話,有一個(gè)問題,就是必須等樹完全判斷完才可以最終返回。不想上面的,過程中發(fā)現(xiàn)不一樣就可以立即返回了。

//層次遍歷法判斷兩棵樹是否相似
bool IsSemblable1(BiTree T1,BiTree T2)
{
  stack<BiTNode* > _sta1,_sta2;  //用來存放下一層元素的容器,此處棧和隊(duì)列都行
  BiTNode *p1 = T1,*p2 = T2;   //p1用來跟蹤T1,p2用來跟蹤T2
  while((_sta1.empty() == false || p1 != NULL) &&(_sta2.empty() == false || p2 != NULL))
  {
    if(p1 != NULL && p2 != NULL )  //如果p1和p2都不為空時(shí)
    {
      if(p1->lchild != NULL && p2->lchild != NULL)  //如果p1和p2的左子樹都不為空時(shí)
      {
        _sta1.push(p1->lchild);
        _sta2.push(p2->lchild);
      }
      else if( p1->lchild != NULL || p2->lchild != NULL)  //如果p1的左子樹為空,但是p2的左子樹不為空,或者相反
        return false;
      if(p1->rchild != NULL && p2->rchild != NULL)   //如果p1和p2的右子樹都不為空時(shí)
      {
        _sta1.push(p1->rchild);
        _sta2.push(p2->rchild);
      }
      else if(p1->rchild != NULL || p2->rchild != NULL)  //如果p1的右子樹為空,但是p2的右子樹不為空,或者相反
        return false;
      //訪問完兩棵樹的當(dāng)前結(jié)點(diǎn)后,置空讓下一次循環(huán)彈出棧中元素(此處其實(shí)直接彈出元素也行)
      p1 = NULL;
      p2 = NULL;
    }
    else if(p1 != NULL || p2 != NULL)    //當(dāng)前節(jié)點(diǎn)有一個(gè)為空
      return false;
    else
    {
      //彈出兩個(gè)樹的棧頂元素
      p1 = _sta1.top();
      p2 = _sta2.top();
      _sta1.pop();
      _sta2.pop();
    }
  }
  return true;
}
//遞歸判斷兩棵樹是否相似
bool IsSemblable2(BiTree T1,BiTree T2)
{
  bool leftS = false,rightS = false;   //用來接受子樹返回的信息
  if(T1 == NULL && T2 == NULL)    //兩個(gè)結(jié)點(diǎn)都為空
    return true;
  else if(T1 == NULL || T2 == NULL)  //有一個(gè)結(jié)點(diǎn)不為空
    return false;
  else
  {
    int leftS = IsSemblable2(T1->lchild,T2->lchild);  //遞歸左子樹
    int rightS = IsSemblable2(T1->rchild,T2->rchild);  //遞歸右子樹
    return leftS && rightS ;  //返回兩個(gè)子樹的信息
  }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    雖然通過弱引用指針可以有效的解除循環(huán)引用,但這種方式必須在程序員能預(yù)見會(huì)出現(xiàn)循環(huán)引用的情況下才能使用,也可以是說這個(gè)僅僅是一種編譯期的解決方案,如果程序在運(yùn)行過程中出現(xiàn)了循環(huán)引用,還是會(huì)造成內(nèi)存泄漏的
    2013-09-09
  • 深入第K大數(shù)問題以及算法概要的詳解

    深入第K大數(shù)問題以及算法概要的詳解

    本篇文章是對(duì)第K大數(shù)問題以及算法概要進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言中bool變量的深入理解

    C語言中bool變量的深入理解

    C語言中沒有BOOL類型變量,它是C++獨(dú)有的,由于使用BOOL類型可以使代碼更具有可讀性,下面這篇文章主要給大家介紹了關(guān)于C語言中bool變量的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 淺談C語言的變量和常量

    淺談C語言的變量和常量

    這篇文章主要為大家詳細(xì)介紹了C語言的變量和常量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++實(shí)現(xiàn)單置換密碼

    C++實(shí)現(xiàn)單置換密碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)單置換密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 基于opencv的行人檢測(cè)(支持圖片視頻)

    基于opencv的行人檢測(cè)(支持圖片視頻)

    本文主要介紹了基于opencv的行人檢測(cè)(支持圖片視頻),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C語言動(dòng)態(tài)規(guī)劃多種背包問題分析講解

    C語言動(dòng)態(tài)規(guī)劃多種背包問題分析講解

    背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量內(nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高
    2022-04-04
  • C語言指針和數(shù)組深入探究使用方法

    C語言指針和數(shù)組深入探究使用方法

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-08-08
  • C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    大家好,今天給大家?guī)淼氖琼樞虮?,我覺得順序表還是有比較難理解的地方的,于是我就把這一塊的內(nèi)容全部整理到了一起,希望能夠給剛剛進(jìn)行學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人帶來一些幫助,或者是已經(jīng)學(xué)過這塊的朋友們帶來更深的理解,我們現(xiàn)在就開始吧
    2022-05-05

最新評(píng)論

信丰县| 安国市| 南江县| 丹阳市| 会同县| 汤阴县| 临湘市| 民县| 邯郸县| 高雄县| 壶关县| 成安县| 子长县| 栾川县| 芜湖县| 伊宁县| 山东省| 枣阳市| 繁昌县| 高雄县| 岳阳县| 安仁县| 黄梅县| 永康市| 石屏县| 综艺| 金阳县| 莒南县| 崇州市| 新乡市| 闻喜县| 兴国县| 花垣县| 麻江县| 阜平县| 晋城| 黎城县| 台东市| 长白| 嘉峪关市| 黄骅市|