天天看點

樹的子結構

題目:輸入兩棵二叉樹A和B,判斷B是不是A的子結構。

二叉樹結點的定義如下:

例如圖中的兩棵二叉樹,由于A中有一部分子樹的結構和B是一樣的,是以B是A的子結構。

樹的子結構
樹的子結構

要查找樹A中是否存在和樹B結構一樣的子樹,可以分成兩步:

第一步在樹A中找到和B的根節點的值一樣的結點R;

第二步再判斷樹A中以R為根結點的子樹是不是包含和樹B一樣的結構。

第一步在樹A中查找與根結點的值一樣的結點,這實際上就是樹的周遊。遞歸調用HasSubTree周遊二叉樹A。如果發現某一結點的值和樹B的頭結點的值相同,則調用DoesTreeHavaTree2,做第二步判斷。

第二步是判斷樹A中以R為根結點的子樹是不是和樹B具有相同的結構。

核心代碼:

樹的子結構
樹的子結構

注意在使用指針的時候一定要注意邊界條件,即檢查空指針。當樹A或樹B為空的時候,定義相應的輸出。如果沒有檢查并做相應的處理,程式非常容易崩潰。

本文轉自夏雪冬日部落格園部落格,原文連結:http://www.cnblogs.com/heyonggang/p/3405482.html,如需轉載請自行聯系原作者

繼續閱讀