欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

名稱:判斷兩個(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ì)于遞歸,看起來比非遞歸要簡(jiǎn)單不少?;镜乃悸泛芎?jiǎn)單,要注意的是,在程序需要從子樹接收返回是否相似的信息。這樣的話,有一個(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é)

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

上一篇:C語(yǔ)言合并兩個(gè)帶頭節(jié)點(diǎn)升序排列鏈表

欄    目:C語(yǔ)言

下一篇:C++實(shí)現(xiàn)合并兩個(gè)排序的鏈表

本文標(biāo)題:判斷兩顆二叉樹是否相似的兩種方法

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/408.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有