输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:假设有a、b两棵树:1、首先对两棵树的根节点进行判断,根节点不相等,就用a树的左子树再去和b树比较,如果还是不相等,再用a树的右子树再去和b树进行比较。
2、如果根节点的值相等,再进一步判断对应的左子树和右子树是否相等,
class Solution {
public:
bool HasSubtree(TreeNode* pRootA, TreeNode* pRootB)
{
if (pRootA == NULL || pRootB == NULL) return false;
return isSubtree(pRootA, pRootB) || //判断根节点是否相等
HasSubtree(pRootA->left, pRootB) || //若根节点不相等,用a树的左子树在和b树比较
HasSubtree(pRootA->right, pRootB); //左子树不相等,就用右子树再去比较
}
bool isSubtree(TreeNode* pRootA, TreeNode* pRootB) {
if (pRootB == NULL) return true;
if (pRootA == NULL) return false;
if (pRootB->val == pRootA->val) {
return isSubtree(pRootA->left, pRootB->left) //根节点匹配就进行下一步判断
&& isSubtree(pRootA->right, pRootB->right); ///进一步在判断左子树和右子树是否相等
} else return false;
}
};