剑指offer——26. 树的子结构 发表于 2020-02-15 | 分类于 算法 , 剑指offer | 字数统计: 274 | 阅读时长 ≈ 1 剑指offer刷题 26. 树的子结构NowCoder 题目描述 解题思路123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/*思路: 递归1、遍历A找到匹配的头 if(pRoot1->val == pRoot2->val) { //匹配结构 } return hasSubtree(pRoot1->left) || hasSubtree(pRoot1->right); 2、匹配判断结构是否相等 bool isSame(TreeNode* p1, TreeNode* p2) { //边界条件 p2为空 遍历完了 -》true if(!p2) return true; if(!p1 || p1->val != p2->val) return false; //p1为空且p2不为空 或者值不匹配 false return isSame(p1->left, p2->left) && isSame(p1->right, p2->right) }**//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(!pRoot1 || !pRoot2) return false; if(pRoot1->val == pRoot2->val) { //判断当前分支是否匹配 if( isSame(pRoot1, pRoot2)) return true; } return hasSubtree(pRoot1->left, pRoot2) || hasSubtree(pRoot1->right, pRoot2); } bool isSame(TreeNode* p1, TreeNode* p2) { //边界条件 p2为空 遍历完了 -》true if(!p2) return true; if(!p1 || p1->val != p2->val) return false; //p1为空且p2不为空 或者值不匹配 false return isSame(p1->left, p2->left) && isSame(p1->right, p2->right); }}; 创作不易,欢迎打赏! 打赏 微信支付 支付宝 -------------本文结束感谢您的阅读-------------