树的子结构是指:在二叉树A中存在二叉树B,也是就是二叉树B是二叉树A的子结构。如下图所示:
基本思路:
首先在二叉树A中查找与二叉树B的根节点的值相同的节点,然后再一次判断该节点的左右孩子节点是不是跟二叉树B的左右孩子节点相同。
代码如下:
boolean hasSubTree(tree *A, tree *B) {
if (A == B) {
return true;
}
if (B == null) {
return true;
}
if (A == null) {
return false;
}
if (A->data != B->data) {
return false;
}
boolean result = match(A, B);
if (result) {
return true;
}
return hasSubTree(A->lchild, B) || hasSubTree(A->rchild, B);
}
boolean match(tree *A, tree *B) {
if (A == B) {
return true;
}
if (B == null) {
return true;
}
if (A == null) {
return false;
}
if (A->data != B->data) {
return false;
}
return match(A->lchild, B->lchild) && match(A->rchild, B->rchild);
}