(剑指Offer)面试题18:树的子结构
2015-07-15 17:35
537 查看
题目:
输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结构定义如下:
struct TreeNode{ int val; TreeNode* left; TreeNode* right; };
思路:
判断二叉树B是否为二叉树A的子树:首先判断二叉树A的根节点值是否等于二叉树B的根节点值;
如果是,则继续往下遍历,判断二叉树A的左子节点和二叉树B的左子结点以及二叉树A的右子节点和二叉树B的右子节点是否都相等,直到叶子节点;(递归)
return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);
如果不是,则判断二叉树B是否为二叉树A左子树的子树或者二叉树B是否为二叉树A右子树的子树;(递归)
result=HasSubtree(pRoot1->left,pRoot2);
result=HasSubtree(pRoot1->right,pRoot2);
代码:
struct TreeNode{ int val; TreeNode* left; TreeNode* right; };
bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){
if(pRoot2==NULL)
return true;
if(pRoot1==NULL)
return false;
if(pRoot1->val!=pRoot2->val)
return false;
return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
bool result=false;
if(pRoot1!=NULL && pRoot2!=NULL){
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;
}
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/6e196c44c7004d15b1610b9afca8bd88?rp=1AC代码:
class Solution { public: bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){ if(pRoot2==NULL) return true; if(pRoot1==NULL) return false; if(pRoot1->val!=pRoot2->val) return false; return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right); } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result=false; if(pRoot1!=NULL && pRoot2!=NULL){ 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; } };
相关文章推荐
- 程序员面试失败的5大原因
- 黑马程序员--OC笔记
- 黑马程序员————第四天
- 黑马程序员————第三天
- 黑马程序员————第二天
- Web开发技术十年发展历程
- 黑马程序员 反射
- 火车上看得面试题
- 黑马程序员_基础语法笔记
- 黑马程序员_Java概述笔记
- 【.Net码农】RDLC 在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义
- 阿里巴巴电话面试2015/7/15
- 黑马程序员——Java基础---io流
- 求职简历怎么写,看看百度吐槽
- windbg相关(阿里巴巴电话面试总结)
- (剑指Offer)面试题17:合并两个排序的链表
- 搜的面试题零散记录
- 15个高级Java多线程面试题及回答
- 阿里电话面试笔记
- 面试,一个不对等的双选之路