输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 二叉树类的题一般使用递归,分制求解左右子树的方法
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: //判断树proot2是否是proot1的子结构 bool Dfs(TreeNode* pRoot1, TreeNode* pRoot2) { //proot2树为空,说明空之前的结点都是相同的 if (pRoot2 == nullptr) return true; //proot1树为空,proot2不为空,说明proot1树中没找到树proot2 if (pRoot1 == nullptr) return false; //只有当前结点相同,才会向下递归 return pRoot1->val == pRoot2->val && Dfs(pRoot1->left, pRoot2->left) && Dfs(pRoot1->right, pRoot2->right); } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot2 == nullptr || pRoot1 == nullptr) return false; //当前树有或者左子树有或者右子树有,都成立 return Dfs(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); } };