劍指offer(17)

題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

時間限制:1秒 空間限制:32768K 熱度指數:269664

思想:根據B數的根結點從A樹的根結點開始遍歷匹配,每訪問一個結點都判斷當前結點是否與要查找的子樹結點相同,不同繼續向左右孩子進行搜索;根結點匹配成功後,再繼續進行左右孩子的匹配判斷。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        if(pRoot1==NULL||pRoot2==NULL)
            return false;

        bool result=false;

        if(pRoot1->val==pRoot2->val){
            result=Root1hasRoot2(pRoot1,pRoot2);
        }
        if(result==false)
            result=HasSubtree(pRoot1->left,pRoot2);
        if(result==false)
            result=HasSubtree(pRoot1->right,pRoot2);
        return result;
    }

    bool Root1hasRoot2(TreeNode* tree1,TreeNode* tree2)
    {
        if(tree2==NULL)
            return true;
        if(tree1==NULL) 
            return false;
        if(tree1->val!=tree2->val)
            return false;

        return Root1hasRoot2(tree1->left,tree2->left)&&Root1hasRoot2(tree1->right,tree2->right);

    }

};

參考博客:https://blog.csdn.net/a784586/article/details/56486144?locationnum=4&fps=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章