题目描述

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

建立一个函数isSubtreeWithSameRoot(TreeNode* pRoot1, TreeNode* pRoot2)判断第二个是不是第一个的子结构且是从根节点开始匹配相同的。

然后在HasSubtree中前序遍历判断是否isSubtreeWithSameRoot。

需要注意的是,子结构不需要是某个“叶结构”,只要是树的一个部分就是它的子结构。

 

/*
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 || !pRoot2) return false;
        if (isSubtreeWithSameRoot(pRoot1, pRoot2)) return true;
        if (HasSubtree(pRoot1->left, pRoot2)) return true;
        if (HasSubtree(pRoot1->right, pRoot2)) return true;
        return false;
    }
    bool isSubtreeWithSameRoot(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        if (!pRoot1 && pRoot2) return false;
        if (!pRoot2) return true;
        if (pRoot1->val != pRoot2->val) return false;
        return isSubtreeWithSameRoot(pRoot1->left, pRoot2->left)
            && isSubtreeWithSameRoot(pRoot1->right, pRoot2->right);
    }
};

 

相关文章:

  • 2021-08-02
  • 2021-07-06
  • 2021-11-20
  • 2021-08-25
  • 2021-08-23
  • 2022-02-24
  • 2022-01-20
猜你喜欢
  • 2021-07-18
  • 2021-11-03
  • 2021-11-03
  • 2021-11-27
  • 2022-12-23
  • 2021-11-23
相关资源
相似解决方案