输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
先判断A和B的根节点是否相同,不相同则递归找A的左右子树是否和B的根节点相同,一直不相同则返回false
若找到相同根节点,判断该根节点的左右子树是否也对应和B的左右子树相等
若B为空,则B已遍历完,返回true
若A为空,B还未遍历完A已经为空,返回false
C++
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot1 == nullptr || pRoot2 == nullptr) return false; return CompareRoot1AndRoot2(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); } bool CompareRoot1AndRoot2(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2 == nullptr) return true; if(pRoot1 == nullptr ) return false; return pRoot1->val == pRoot2->val && CompareRoot1AndRoot2(pRoot1->left, pRoot2->left) && CompareRoot1AndRoot2(pRoot1->right, pRoot2->right); } };