题目:输入两棵二叉树A和B,判断B是不是A得子结构。
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
BinaryTreeNode *CreateTree() {
int a;
cin >> a;
if (a != -1) {
BinaryTreeNode *root = new BinaryTreeNode;
root->m_nValue = a;
cout << "请输入" << a << "的左结点:";
root->m_pLeft = CreateTree();
cout << "请输入" << a << "的右结点:";
root->m_pRight = CreateTree();
return root;
}
return NULL;
}
//根结点相同判断是不是子树
bool AhasB(BinaryTreeNode *root1, BinaryTreeNode *root2) {
if (root2 == NULL)
return true;
if (root1 == NULL)
return false;
if (root1->m_nValue != root2->m_nValue)
return false;
return AhasB(root1->m_pLeft, root2->m_pLeft) &&
AhasB(root1->m_pRight, root2->m_pRight);
}
bool HasSubtree(BinaryTreeNode *root1, BinaryTreeNode *root2) {
bool result = false;
if (root1 != NULL && root2 != NULL) {
if (root1->m_nValue == root2->m_nValue)
result = AhasB(root1, root2);
if (!result)
result = HasSubtree(root1->m_pLeft, root2);
if (!result)
result = HasSubtree(root1->m_pRight, root2);
}
return result;
}
int main() {
BinaryTreeNode *root1 = CreateTree();
BinaryTreeNode *root2 = CreateTree();
bool result = HasSubtree(root1, root2);
cout << result << endl;
return 0;
}