1. 程式人生 > 其它 >劍指Offer-第7天 搜尋與回溯演算法(簡單)

劍指Offer-第7天 搜尋與回溯演算法(簡單)

第一題

題目連結:https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof/

個人題解:遞迴判斷即可,先寫一個判斷函式,再在函式裡面遞迴呼叫即可。

程式碼:

class Solution {
public:
    bool judge(TreeNode* A,TreeNode* B){
        if(!B) return true;
        if(!A) return false;
        if(A->val != B->val) return false;
        return judge(A->left,B->left) && judge(A->right,B->right);
    }
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(!A || !B) return false;
        return judge(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);  
    }
};

執行截圖:

第二題

題目連結:https://leetcode.cn/problems/er-cha-shu-de-jing-xiang-lcof/

個人題解:先建立左子樹和右子樹,然後左指向右,右指向左。

程式碼:

class Solution {
public:
    TreeNode* mirrorTree(TreeNode* root) {
        if(!root) return NULL;
        auto left=mirrorTree(root->left);
        auto right=mirrorTree(root->right);
        root->left=right;
        root->right=left;
        return root;
    }
};

執行截圖:

第三題

題目連結:https://leetcode.cn/problems/dui-cheng-de-er-cha-shu-lcof/

個人題解:比上一題多了一個判斷罷了

程式碼:

class Solution {
public:
    bool judge(TreeNode* a,TreeNode* b){
        if(!a && !b) return true;
        if(!a || !b) return false;
        return a->val==b->val && judge(a->left,b->right) && judge(a->right,b->left);
    }
    bool isSymmetric(TreeNode* root) {
        return judge(root,root);
    }
};

執行截圖: