剑指offer(17)—树的子结构
2017-08-27 18:39
267 查看
树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路
递归代码
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2 == NULL) //tree2是空树,不管tree1是否为空树,都返回true return true; if(pRoot1 == NULL) //tree2不是空树,tree1是空树,则返回false return false; else{ //tree1和tree2都不是空树,则依次判断根节点,及左右子树是否一致 if(pRoot1->val == pRoot2->val) return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right); else return DoesTree1HaveTree2(pRoot1->left, pRoot2) || DoesTree1HaveTree2(pRoot1->right, pRoot2); } } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot1 == NULL || pRoot2 == NULL) //题意:空树不是任意一个树的子结构 return false; bool res = false; if(pRoot1->val == pRoot2->val) //若根节点相同,则判断tree1是否包含tree2,调用函数DoesTree1HaveTree2 res = DoesTree1HaveTree2(pRoot1, pRoot2); if(!res) //若tree1不包含tree2,则判断tree2是否为tree1的左子树的子结构 res = HasSubtree(pRoot1->left, pRoot2); if(!res) //若tree2不是tree1的左子树的子结构,则判断tree2是否为tree1的右子树的子结构 res = HasSubtree(pRoot1->right, pRoot2); return res; } };
相关文章推荐
- 剑指offer 17 树的子结构
- 剑指Offer面试题:17.树的子结构
- 剑指Offer--17.树的子结构
- 剑指Offer(17)______树的子结构
- 剑指Offer——(17)树的子结构
- 【剑指offer-解题系列(17)】树的子结构
- 剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构
- 剑指offer(17):反转链表
- 《剑指offer》:[17]调整数组顺序使奇数位于偶数面前
- [剑指Offer] 17.树的子结构
- [剑指offer学习心得]之:树的子结构
- 剑指offer:树的子结构
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 《剑指offer》树的子结构
- 剑指offer之面试题17:合并两个排序的链表
- 剑指offer(19):树的子结构
- 剑指offer系列—T18树的子结构
- 剑指offer面试题17,18:反转链表+合并有序链表
- 剑指offer-chapter3-面试题17-合并两个排序的链表(java)
- 剑指offer_17_树的子结构