劍指Offer-第7天 搜尋與回溯演算法(簡單)
阿新 • • 發佈:2022-05-09
第一題
題目連結: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); } };
執行截圖: