方法一:先序判断每个节点:时间O(mn),空间O(m) m>n
题解:
- 先序遍历二叉树A
- 判断二叉树A节点node为根,二叉树B能否构成子结构,
- 接口 isSubStructure() 先序遍历二叉树 A ,recur() 判断是不是子结构
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
bool recur(TreeNode* a, TreeNode* b)
{
if (b == nullptr)
return true;
if (a == nullptr || a->val != b->val)
return false;
return rescur(a->left, b->left) && rescur(a->right, b->right);
}
bool isSubStructure(TreeNode* A, TreeNode* B)
{
// 先序判断每个节点是否能构成子树
// 1.先序遍历树A
// 2.判断树A以n为根节点,是否能构成子树B,若能构成则返回true
if (A == nullptr || B == nullptr)
return false;
return rescur(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
}
};