欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(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)文章

  • 如何給隨機(jī)數(shù)加密

    如何給隨機(jī)數(shù)加密

    隨機(jī)數(shù)加密的簡單算法,需要的朋友可以參考一下
    2013-03-03
  • 詳解C語言面向?qū)ο缶幊讨械姆庋b

    詳解C語言面向?qū)ο缶幊讨械姆庋b

    這篇文章主要為大家詳細(xì)介紹了C語言面向?qū)ο缶幊讨械姆庋b,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++日期類計(jì)算器的模擬實(shí)現(xiàn)舉例詳解

    C++日期類計(jì)算器的模擬實(shí)現(xiàn)舉例詳解

    兩個(gè)日期之間相隔天數(shù)的計(jì)算網(wǎng)上有許多的軟件,這里主要介紹如何使用C/C++語言來完成這樣的功能,下面這篇文章主要給大家介紹了關(guān)于C++日期類計(jì)算器的模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)階之棧和隊(duì)列的實(shí)現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)進(jìn)階之棧和隊(duì)列的實(shí)現(xiàn)

    棧和隊(duì)列,嚴(yán)格意義上來說,也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為 "一對(duì)一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2021-11-11
  • VC++中HTControl的CHTButton按鈕控件類用法實(shí)例解析

    VC++中HTControl的CHTButton按鈕控件類用法實(shí)例解析

    這篇文章主要介紹了VC++中HTControl的CHTButton按鈕控件類用法,對(duì)于大家進(jìn)行VC++項(xiàng)目開發(fā)有一定的幫助作用,需要的朋友可以參考下
    2014-08-08
  • C++超詳細(xì)講解單鏈表的實(shí)現(xiàn)

    C++超詳細(xì)講解單鏈表的實(shí)現(xiàn)

    單鏈表是后面要學(xué)的雙鏈表以及循環(huán)鏈表的基礎(chǔ),要想繼續(xù)深入了解數(shù)據(jù)結(jié)構(gòu)以及C++,我們就要奠定好這塊基石!接下來就和我一起學(xué)習(xí)吧
    2022-03-03
  • C語言控制進(jìn)程之進(jìn)程等待詳解

    C語言控制進(jìn)程之進(jìn)程等待詳解

    這篇文章主要介紹了C語言控制進(jìn)程之進(jìn)程等待即回收子進(jìn)程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言PlaySound函數(shù)使用方法

    C語言PlaySound函數(shù)使用方法

    這篇文章介紹了C語言PlaySound函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 詳解PID控制器原理

    詳解PID控制器原理

    什么是 PID?它是一種在編程中使用的基本方法,如果正確調(diào)整,可以令人難以置信的有效和準(zhǔn)確,PID代表比例積分微分,3個(gè)單獨(dú)的部分連接在一起,雖然有時(shí)你不需要三個(gè)都使用。例如,您可以改為有P控制,PI控制或PD控制
    2021-06-06

最新評(píng)論