https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

输入

{8,8,#,9,#,2,#,5},{8,9,#,2}

返回值

true

  1. /*
  2. struct TreeNode {
  3. int val;
  4. struct TreeNode *left;
  5. struct TreeNode *right;
  6. TreeNode(int x) :
  7. val(x), left(NULL), right(NULL) {
  8. }
  9. };*/
  10. class Solution {
  11. public:
  12. bool HasSubtree(TreeNode *pRoot1, TreeNode *pRoot2) {
  13. if (pRoot1 == nullptr||pRoot2== nullptr) {
  14. return false;
  15. }
  16. if (pRoot1 == pRoot2) {
  17. return true;
  18. }
  19. bool res = false;
  20. if (pRoot1->val == pRoot2->val) {
  21. res = isSubTree(pRoot1, pRoot2);
  22. }
  23. if (res) {
  24. return true;
  25. }
  26. return isSubTree(pRoot1->left, pRoot2) || isSubTree(pRoot1->right, pRoot2);
  27. };
  28. bool isSubTree(TreeNode *pRoot1, TreeNode *pRoot2) {
  29. if (pRoot1 == pRoot2) {
  30. return true;
  31. }
  32. if (pRoot2 == nullptr) {
  33. return true;
  34. }
  35. if (pRoot1 == nullptr) {
  36. return false;
  37. }
  38. if (pRoot1->val != pRoot2->val) {
  39. return false;
  40. } else {
  41. return isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right);
  42. }
  43. }
  44. };