题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:
同样考虑用递归来做。
利用两个递归函数,一个用于判断两棵树树否相等,另一个递归取A的子树与B比较。
包含几种情况:
A为空或B为空,false;
A与B相等,true;
B为A的子结构,true;
B不为A的子结构,false.
代码:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool equal(TreeNode* t1, TreeNode* t2) { if(t1==nullptr && t2==nullptr) return true; else if(t1==nullptr) return false; else if(t2==nullptr) return true; else { if(t1->val==t2->val) { return (equal(t1->left, t2->left) && equal(t1->right, t2->right)); } else return false; } } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot2 == nullptr) return false; if(pRoot1 == nullptr) return false; if(pRoot1->val != pRoot2->val) { return (HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2)); } else { if(equal(pRoot1->left, pRoot2->left)&& equal(pRoot1->right, pRoot2->right)) return true; else { if(HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2)) return true; else return false; } } } };