题目:二叉树的结点定义如下:
struct TreeNode
{
int m_nValue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
输入两棵二叉树A和B,判断树B是不是A的子结构。
例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。
1 8
/ \ / \
8 7 9 2
/ \
9 2
/ \
4 7
struct Node
{
int val;
Node *left;
Node *right;
Node(int v)
{
val = v;
left = right = NULL;
}
};
bool visitSub(Node *a, Node *b)
{
if (b == NULL)
{
return true;
}
if (a == NULL)
{
return false;
}
if (a->val != b->val)
{
return false;
}
return visitSub(a->left, b->left) && visitSub(a->right, b->right);
}
bool visit(Node *a, Node *b)
{
bool result = false;
if (a->val == b->val)
{
result = visitSub(a, b);
}
if (!result && a->left != NULL)
{
result = visit(a->left, b);
}
if (!result && a->right != NULL)
{
result = visit(a->right, b);
}
return result;
}
bool hasSubtree(Node *a, Node *b)
{
if (a == NULL && b == NULL)
{
return true;
}
if (a == NULL && b != NULL)
{
return false;
}
if (a != NULL && b == NULL)
{
return false;
}
return visit(a, b);
}