青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

每天早晨叫醒你的不是鬧鐘,而是夢想

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  62 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

題目:二叉樹的結點定義如下:

struct TreeNode

{

        int m_nValue;

        TreeNode* m_pLeft;

        TreeNode* m_pRight;

};

輸入兩棵二叉樹AB,判斷樹B是不是A的子結構。

例如,下圖中的兩棵樹AB,由于A中有一部分子樹的結構和B是一樣的,因此B就是A的子結構。

                 1                                                   8
               /    \                                               /    \
              8    7                                             9    2
            /    \
           9    2
                /  \
               4  7

分析:這是2010年微軟校園招聘時的一道題目。二叉樹一直是微軟面試題中經常出現的數據結構。對微軟有興趣的讀者一定要重點關注二叉樹。

                回到這個題目的本身。要查找樹A中是否存在和樹B結構一樣的子樹,我們可以分為兩步:第一步在樹A中找到和B的根結點的值一樣的結點N,第二步再判斷樹A中以N為根結點的子樹是不是包括和樹B一樣的結構。

                第一步在樹A中查找與根結點的值一樣的結點。這實際上就是樹的遍歷。對二叉樹這種數據結構熟悉的讀者自然知道我們可以用遞歸的方法去遍歷,也可以用循環的方法去遍歷。由于遞歸的代碼實現比較簡潔,面試時如果沒有特別要求,我們通常都會采用遞歸的方式。下面是參考代碼:

bool HasSubtree(TreeNode* pTreeHead1, TreeNode* pTreeHead2)

{

        if((pTreeHead1 == NULL && pTreeHead2 != NULL) ||

                (pTreeHead1 != NULL && pTreeHead2 == NULL))

                return false;

 

        if(pTreeHead1 == NULL && pTreeHead2 == NULL)

                return true;

 

        return HasSubtreeCore(pTreeHead1, pTreeHead2);

}

bool HasSubtreeCore(TreeNode* pTreeHead1, TreeNode* pTreeHead2)

{

        bool result = false;

        if(pTreeHead1->m_nValue == pTreeHead2->m_nValue)

        {

                result = DoesTree1HaveAllNodesOfTree2(pTreeHead1, pTreeHead2);

        }

 

        if(!result && pTreeHead1->m_pLeft != NULL)

                result = HasSubtreeCore(pTreeHead1->m_pLeft, pTreeHead2);

 

        if(!result && pTreeHead1->m_pRight != NULL)

                result = HasSubtreeCore(pTreeHead1->m_pRight, pTreeHead2);

 

        return result;

}

在上述代碼中,我們遞歸調用hasSubtreeCore遍歷二叉樹A。如果發現某一結點的值和樹B的頭結點的值相同,則調用DoesTree1HaveAllNodeOfTree2,做第二步判斷。

在面試的時候,我們一定要注意邊界條件的檢查,即檢查空指針。當樹A或樹B為空的時候,定義相應的輸出。如果沒有檢查并做相應的處理,程序非常容易崩潰,這是面試時非常忌諱的事情。由于沒有必要在每一次遞歸中做邊界檢查(每一次遞歸都做檢查,增加了不必要的時間開銷),上述代碼只在HasSubtree中作了邊界檢查后,在HasSubtreeCore中作遞歸遍歷。

接下來考慮第二步,判斷以樹A中以N為根結點的子樹是不是和樹B具有相同的結構。同樣,我們也可以用遞歸的思路來考慮:如果結點N的值和樹B的根結點不相同,則以N為根結點的子樹和樹B肯定不具有相同的結點;如果他們的值相同,則遞歸地判斷他們的各自的左右結點的值是不是相同。遞歸的終止條件是我們到達了樹A或者樹B的葉結點。參考代碼如下:

bool DoesTree1HaveAllNodesOfTree2(TreeNode* pTreeHead1, TreeNode* pTreeHead2)

{

        if(pTreeHead2 == NULL)

                return true;

 

        if(pTreeHead1 == NULL)

                return false;

 

        if(pTreeHead1->m_nValue != pTreeHead2->m_nValue)

                return false;

 

        return DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pLeft, pTreeHead2->m_pLeft) &&

                DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pRight, pTreeHead2->m_pRight);

}

 

  博主何海濤對本博客文章享有版權。網絡轉載請注明出處http://zhedahht.blog.163.com/

posted on 2011-04-29 14:03 沛沛 閱讀(392) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構/算法
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品91| 亚洲国产精品www| 一区二区三区视频在线观看| 香蕉免费一区二区三区在线观看 | 久久字幕精品一区| 先锋影院在线亚洲| 午夜精品电影| 久久久久国产成人精品亚洲午夜| 亚洲毛片在线看| 亚洲天堂免费在线观看视频| 99在线精品免费视频九九视| 亚洲精品人人| 在线亚洲高清视频| 欧美亚洲在线播放| 麻豆精品视频在线观看视频| 欧美美女福利视频| 欧美性猛交xxxx免费看久久久 | 久久久www| 欧美女人交a| 欧美性久久久| 1769国产精品| 亚洲视频碰碰| 欧美激情一区二区三区在线视频 | 99综合精品| 午夜一级久久| 欧美国产日韩二区| 国产婷婷色一区二区三区| 亚洲第一中文字幕| 亚洲欧美激情视频| 亚洲激情黄色| 先锋影音国产一区| 欧美日韩国产大片| 欧美国产精品人人做人人爱| 亚洲国产成人精品久久久国产成人一区 | 久热这里只精品99re8久| 欧美人与性禽动交情品 | 亚洲一级在线| 久久综合久久综合久久| 日韩一区二区精品| 欧美激情在线有限公司| 在线免费观看欧美| 久久婷婷蜜乳一本欲蜜臀| 亚洲综合社区| 亚洲欧美电影院| 欧美日韩午夜激情| 中文精品在线| 一区二区三区精品视频在线观看| 另类尿喷潮videofree | 欧美激情第六页| 亚洲精品国产精品国自产观看浪潮| 久久亚洲不卡| 欧美日本一道本| 午夜在线视频一区二区区别| 亚洲小视频在线观看| 国产伦精品一区二区三区高清| 午夜影视日本亚洲欧洲精品| 亚洲欧美日韩一区二区在线| 国产亚洲欧美激情| 亚洲激情网站| 黄色资源网久久资源365| 狠狠色丁香久久婷婷综合_中| 美女图片一区二区| 欧美四级在线观看| 久久亚洲综合色| 欧美视频在线观看 亚洲欧| 久久电影一区| 欧美精品在线观看一区二区| 久久久久9999亚洲精品| 欧美xxx在线观看| 久久精品视频免费播放| 欧美日韩国产区| 狠狠色综合日日| 亚洲精品小视频在线观看| 欧美成人精品一区| 日韩一级裸体免费视频| 在线欧美电影| 久久久国产视频91| 久久精品99无色码中文字幕 | 久久成人免费视频| 国产精品美女www爽爽爽| 一区二区三区国产| 亚洲一区二区成人| 欧美日韩裸体免费视频| 欧美国产一区二区三区激情无套| 国产亚洲欧美一区| 久久综合色天天久久综合图片| 欧美在现视频| 国产亚洲精品美女| 小嫩嫩精品导航| 久久免费视频这里只有精品| 伊大人香蕉综合8在线视| 久久九九精品99国产精品| 欧美不卡一卡二卡免费版| 亚洲日韩中文字幕在线播放| 免费成人在线视频网站| 亚洲激情欧美激情| 亚洲一区三区视频在线观看| 国产精品videosex极品| 久久久国产精品一区二区中文| 免费日韩成人| 亚洲欧美日韩在线一区| 国产综合视频在线观看| 欧美美女日韩| 久久综合九色九九| 一区二区欧美日韩| 欧美成人综合网站| 亚洲欧美视频| 久久久久久穴| 中国av一区| 免费看亚洲片| 久久久久久久网站| 亚洲永久在线观看| 99亚洲伊人久久精品影院红桃| 国产色婷婷国产综合在线理论片a| 久久综合给合久久狠狠色| 亚洲视频精品在线| 亚洲精品一区二区三区婷婷月| 久久久亚洲人| 久久精品国产免费观看| 午夜精品免费视频| 亚洲欧美日韩网| 欧美一区二区高清| 午夜欧美不卡精品aaaaa| 午夜精品视频在线| 久久躁日日躁aaaaxxxx| 亚洲美女福利视频网站| 欧美国产一区二区在线观看| 免费高清在线视频一区·| 久久免费高清| 亚洲国产另类精品专区| 亚洲国产日韩精品| 亚洲免费观看高清完整版在线观看熊 | 99视频精品在线| 一个色综合av| 欧美一区二区三区在线视频 | 久久国产精品毛片| 久久精品国产精品亚洲综合| 久久亚洲高清| 99精品国产在热久久婷婷| 亚洲欧美在线高清| 久久综合伊人77777麻豆| 欧美成人精品1314www| 国产精品一区二区久久精品| 在线看成人片| 香蕉久久夜色| 亚洲精品乱码久久久久| 欧美一区二区三区视频免费播放| 欧美~级网站不卡| 国产主播一区二区| 日韩视频免费在线| 久久av老司机精品网站导航| 亚洲欧洲精品一区二区精品久久久 | 久久久久久久尹人综合网亚洲| 欧美成人精品一区| 国产视频一区三区| 欧美中文在线观看| 午夜激情久久久| 国产精品久久久久久久久久直播| 亚洲精品国产品国语在线app| 久久色中文字幕| 欧美在线影院在线视频| 国产精品久久久久久久久久久久久 | 亚洲一区黄色| 一二美女精品欧洲| 欧美日产在线观看| 亚洲影视中文字幕| 亚洲综合二区| 亚洲精品1区| 伊人天天综合| 欧美成人午夜激情| 欧美精品播放| 午夜精品一区二区三区四区| 一区二区三区精品国产| 国产一区二区精品久久91| 久久人人看视频| 欧美大片网址| 久久久精品日韩欧美| 欧美aⅴ99久久黑人专区| 亚洲视频www| 久久夜色精品国产欧美乱极品| 亚洲精品欧洲| 久久香蕉国产线看观看av| 国产精品99久久久久久久久久久久| 亚洲婷婷在线| 日韩亚洲欧美在线观看| 欧美一区二区三区四区高清 | 久久久精品网| 久久夜色精品国产噜噜av| 中文一区在线| 欧美日韩另类在线| 欧美高潮视频| 国内精品久久久久影院优| 亚洲午夜av| 一本久久精品一区二区| 久久夜色精品亚洲噜噜国产mv| 久久久最新网址| 国产午夜精品在线观看| 亚洲视频一二区| 亚洲影院免费观看| 国产精品一二三|