[雙重DFS]面試題26. 樹的子結構

題目:
在這裏插入圖片描述
題解:

  • 坑點:A、B爲空樹,這兩棵樹都不相等。。。
  • 剩下的用兩層dfs解決,第一層dfs用來判斷B是否是A的左子樹或右子樹,第二層dfs來判斷B是否是A的子結構。
  • 類似題:572. 另一個樹的子樹

代碼如下:

class Solution {
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(!A||!B)return false;//A、B有一個爲空,表示匹配失敗;或者A、B都爲空,這兩顆樹也不相等
        if(isSame(A,B))return true;
        return isSubStructure(A->left,B)||isSubStructure(A->right,B);
    }

    bool isSame(TreeNode* A,TreeNode* B){
        if(!B)return true;//B爲空,A是否空,都完成匹配了
        if(!A)return false;//B爲不空,A爲空,匹配失敗
        if(A->val!=B->val)return false;
        return isSame(A->left,B->left)&&isSame(A->right,B->right);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章