剑指Offer-17-树的子结构 发表于 2020-03-10 | 分类于 剑指Offer | 评论数: | 热度: ℃ 本文字数: 4.9k | 阅读时长 ≈ 4 分钟 题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) Code123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051//先找到根节点相同的顶点后,往后开始匹配每个顶点,递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: //判断pRoot2是不是pRoot1的子结构 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result =false; if(pRoot1!=0&&pRoot2!=0){ //先找到顶点相同的点,判断是否为子结构 if(pRoot1->val==pRoot2->val) result=isSubTree(pRoot1,pRoot2); //找左子树 if(!result) result = HasSubtree(pRoot1->left,pRoot2); //找右子树 if(!result) result = HasSubtree(pRoot1->right,pRoot2); } return result; } //先序遍历看是否满足 bool isSubTree(TreeNode* pRoot1, TreeNode* pRoot2){ //右子树全部匹配玩 if(pRoot2==0) return true; //左边已经遍历完而右边还没有遍历完,则匹配失败 if(pRoot1==0) return false; if(pRoot1->val !=pRoot2->val) return false; //返回递归比较左子树和右子树的结果 return isSubTree(pRoot1->left, pRoot2->left)&& isSubTree(pRoot1->right, pRoot2->right); }}; 相关文章推荐 剑指Offer-1-二维数组的查找 剑指Offer-11-二进制中1的个数 剑指Offer-12-数值的整数次方 剑指Offer-10-矩形覆盖 剑指Offer-13-调整数组顺序使奇数位于偶数前面 ----\(˙<>˙)/----赞赏一下吧~ 打赏 微信支付 支付宝 本文作者: wicherQAQ 本文链接: https://wicherqaq.github.io/2020/03/10/%E5%89%91%E6%8C%87Offer-17-%E6%A0%91%E7%9A%84%E5%AD%90%E7%BB%93%E6%9E%84/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!