剑指offer——普通二叉树的子结构
2017-08-10 10:25
399 查看
1.题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2.解题思路
首先要进行程序的鲁棒性分析:1. 如果B为空树,那么判断结果为false,因为空树不是任意一棵树的子结构;
2. 如果A为空树,那么判断结果也为false。
如此分析以后,只需对A与B均不是空树的情况进行分析。分析思路如下:
1)判断当前A节点和B树的根节点是否相等
2)如果当前节点相等,那么继续对二者当前节点的左右子树进行判断。如果左右子树不等,那么就不是子结构。
3)如果步骤1)中二者当前节点不等,那么则在A中选择左子树作为新的根节点进行步骤1)。
4)如果在左子树中未能判定为子结构,那么则挑选A的右孩子作为新的根节点进行判断。
3.解答——cpp
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: // help bool IsSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot2 == nullptr){ return true; } if (pRoot1 == nullptr && pRoot2 != nullptr){ return false; } if (pRoot1->val != pRoot2->val){ return false; } return (IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right)); } // Original and Robuness bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; // 空树不是任意一个树的子结构,即B为空树时直接返回false if (pRoot2 == nullptr) return false; // 当A为空树且B非空时,B不是A的子结构 if (pRoot1 == nullptr && pRoot2 != nullptr) return false; // 当A、B都不是空树时 // 调用IsSubtree判定B是不是A的子结构 // 如果当前指向的节点相等,则调用Is继续判断 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; } };
相关文章推荐
- 剑指offer-树的子结构 判断二叉树B是不是A的子结构
- 剑指offer 矩形覆盖 树的子结构 二叉树的镜像 数组中重复的数字 第一个只出现一次的字符
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 剑指offer:输入两棵二叉树A,B,判断B是不是A的子结构(Python)
- 剑指offer_二叉树---树的子结构
- 【剑指offer】面试题18:输入两颗二叉树A和B,判断B是不是A的子结构?
- 剑指offer-面试题18 判断二叉树B是不是二叉树A的子结构
- 【剑指offer】第二十六题(树的子结构) 和 第二十七题(二叉树的镜像)
- 剑指OFFER(百度笔试)——二叉树的子结构
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 剑指Offer面试题18树的子结构(递归),面试题19二叉树的镜像(递归和非递归用栈)
- 剑指Offer:树的子结构(JAVA)
- 剑指offer面试题60 把二叉树打印成多行(Java实现)
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 剑指offer 39.判断二叉树是否为平衡二叉树
- 【剑指offer】4.3举例让抽象问题具体化——面试题23:从上往下打印二叉树
- 剑指Offer:二叉树的深度(一刷)
- 【剑指offer】二叉树的子树
- 剑指offer-->面试题6 重建二叉树
- 剑指Offer 面试题28 对称的二叉树