剑指offer18——树的子结构
2017-02-19 16:26
330 查看
题目
输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。思路
我们可以分成两步。第一步在树A中找到与B根节点值相同的节点,第二步判断两部分是否相同。在A中查找与B根节点相同的节点实际上就是树的遍历。二叉树的遍历一般采用递归的方法。
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; if(pRoot2==NULL||pRoot1==NULL) return false; if(pRoot1->val==pRoot2->val) result = dis(pRoot1,pRoot2); if(!result) result = HasSubtree(pRoot1->left,pRoot2); if(!result) result = HasSubtree(pRoot1->right,pRoot2); return result; }
总的代码:
class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; if(pRoot2==NULL||pRoot1==NULL) return false; if(pRoot1->val==pRoot2->val) result = dis(pRoot1,pRoot2); if(!result) result = HasSubtree(pRoot1->left,pRoot2); if(!result) result = HasSubtree(pRoot1->right,pRoot2); return result; } bool dis(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2==NULL) return true; if(pRoot1==NULL) return false; if(pRoot1->val!=pRoot2->val) return false; return dis(pRoot1->left,pRoot2->left)&&dis(pRoot1->right,pRoot2->right); } };
这个题目主要考点就是二叉树的遍历和递归思想的运用。
相关文章推荐
- 剑指offer面试题18-:树的子结构
- 【剑指offer】3.4代码的鲁棒性——面试题18:树的子结构
- 剑指Offer面试题18树的子结构(递归),面试题19二叉树的镜像(递归和非递归用栈)
- 剑指offer-面试题18 判断二叉树B是不是二叉树A的子结构
- 剑指offer18:树的子结构
- 剑指offer之面试题18:树的子结构
- 剑指offer面试18 树的子结构
- 剑指offer面试题18——树的子结构(递归)
- 剑指Offer-18-树的子结构
- 剑指offer-面试题18-树的子结构
- 剑指offer题18_树的子结构
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 【剑指Offer学习】【面试题18 :树的子结构】
- 剑指offer18 树的子结构
- 剑指Offer面试题18(Java版):树的子结构
- 剑指Offer之面试题18:树的子结构
- 剑指offer 面试题18—树的子结构
- 剑指offer面试题18:树的子结构
- 剑指offer-18:判断树的子结构
- [剑指offer]面试题18:树的子结构