牛客網劍指offer第17題 樹的子結構

2022-05-02 13:36:12 字數 715 閱讀 2619

題目:

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

拿到這個題目,我們應該定義什麼情況下是子結構:

當b的頭節點等於a的頭節點,並且左右子樹的頭節點也相等,則返回true,否則我們在a的左子樹或者a的右子樹中繼續判斷:

看下面**:

bool hassubtree(treenode* proot1, treenode*proot2)

顯然,第一行**用於邊界判斷,第二行**,就是如果頭節點相等,且頭節點下的子樹節點也相等,那麼是子結構

第三行**就是在a的左子樹或者a的右子數中尋找。

顯然,僅僅有乙個遞迴結構式不行的,還需要我們判斷子樹節點相等這一條件,顯然這也是乙個遞迴的過程,因為子樹也有子樹,見下面**:

1

bool isequal(treenode* p1,treenode* p2)//

完成對子樹結構的判斷

2

如果我們拋開,1,2行**,上述顯然是對子樹判斷的標準遞迴。若子樹頭節點不相等,則返回false。若相等,則要求左邊和左邊相等,右邊和右邊相等。

當然了,1,2行的邊界很重要:第一行的邊界表明了子樹b到了末尾了,此時自然返回true(注意區別其與上一段**的邊界的區別),第二行**表明了,p2沒有到末尾,反而父樹到了末尾,此時必然是不是子結構。

牛客網 劍指Offer(66題)

1 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 直接遍歷二維陣列 public class solution find 8,a public st...

牛客網 劍指Offer 索引

二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...

牛客網 劍指Offer 索引

二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...