题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解析:需要用两个函数判断,一个用来依次判断是否相等,中间有不相等的就返回0,另一个函数用来遍历树A。
注意巧妙地利用逻辑运算符可以简化代码。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool SameTree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot2==NULL) return true; //树2到尽头则返回1
if(pRoot1==NULL) return false; //树1到尽头(此时树2还没到尽头),返回0
if(pRoot1->val==pRoot2->val)
{
return SameTree(pRoot1->left,pRoot2->left)&&SameTree(pRoot1->right,pRoot2->right); //比较左右子树
}
else return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==NULL||pRoot2==NULL) return false;
else
{
return SameTree(pRoot1,pRoot2)||
HasSubtree(pRoot1->left,pRoot2)||
HasSubtree(pRoot1->right,pRoot2);
}
}
};