主要分為兩段**,一是遞迴a,來查詢是否與b的根節點相同的節點,成功後,進入第二段**,進行a和b的同時遞迴比較。
通過遞迴遍歷a和b兩棵樹來進行檢查,首先考察a和b的根節點是否相同,如果相同則可以繼續向下比較,否則則遞迴比較a的左子樹部分是否有與b的根節點相同的節點,若左子樹失敗,則進行a的右子樹的遞迴查詢。
若對b的根節點查詢成功,則進入a和b同時遞迴的程式,對a和b的左右子樹同時進行比較,若匹配, 則b為a 的子結構,否則不是。
**如下:
/*
struct treenode
};*/
class solution
bool res=false;
if(proot1->val==proot2->val) //先判斷a和b的根節點是否相同,若相同,則繼續向下比較
if(!res) //如果根節點不同,則比較a的左子樹與b的根節點是否相同
if(!res) //如果a的左子樹向下遍歷沒有找到b的結構,則繼續遍歷a的右子樹
return res;
}bool issim(treenode* p1,treenode* p2) //當所比較的a的根節點與b的根節點相同時,則進入此段**對a和b同時遞迴比較
};
i'm not a genius, so i choose to learn more, see more and do more~ 劍指offer 樹的子結構
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。解析 解決樹類問題的時候遞迴是乙個很好的解決方案,並且寫的程式簡單,理解起來也很容易。遞迴的時候謝了乙個函式來判斷當前兩個根節點對應的子樹是否相等 issubtree 不想...
劍指offer 樹的子結構
題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。這實際上二叉樹遍歷演算法的一種應用,要在原二叉樹中查詢是否具有某課子樹,只需要判斷每個節點是否都在二叉樹中是否出現即可。所以需要先判斷頭結點,只有頭結點符合要求才繼續比較其子樹是否符合,一樣依次從頭結點開始比較直到其左右子樹進行比較,如果都符合...
劍指offer 樹的子結構
大體思路如下 在程式遞迴過程中,記得注意遞迴的出口以及空指標的處理 主程式中在root1 root2非空的條件下才能去判斷 判斷judge函式中,一些邊界出口為 if root2 null return true if root1 null return false public class sol...