特殊情况,空树为任何树(包括空树)的子树
struct node
{
int val;
struct node *left;
struct node *right;
node(int t)
{
val = t;
left = 0;
right = 0;
}
};
typedef struct node* link;
// 构建二叉树,用于测试
void insert_tree(link &h, int t)
{
if (0 == h)
{
h = new node(t);
return;
}
if (t < h->val)
insert_tree(h->left, t);
else
insert_tree(h->right, t);
}
// 判断树A和树B是否一致
bool all_same(const link &hA, const link &hB)
{
if (0 == hA) return true;
if (0 == hB) return false;
if (hA->val != hB->val) return false;
return all_same(hA->left, hB->left) && all_same(hA->right,hB->right);
}
// 判断A为B的子树
bool A_sub_of_B(const link &hA, const link &hB)
{
if (0 == hB) return false;
bool result = false;
if (hA->val == hB->val)
result = all_same(hA, hB);
if (result) return true;
result = A_sub_of_B(hA, hB->left);
if (result) return true;
result = A_sub_of_B(hA, hB->right);
return result;
}
// 结合特例,判断A为B的子树
bool treeA_is_sub_of_treeB(const link &hA, const link &hB)
{
if (0 == hA)
return true;
if ( (0 != hA) && (0 == hB) )
return false;
return A_sub_of_B(hA, hB);
}
判断一棵树是不是另一棵树的子树
最新推荐文章于 2024-01-23 19:52:20 发布