设计一个算法 Same(g1,g2),判断两个广义表g1 和 g2 是否相同?bool Same(GLNode *g1,GLNode *g2)

设计一个算法 Same(g1,g2),判断两个广义表 g1 和 g2 是否相同?

img

// 定义广义表节点的结构
struct Node {
    int value;              // 节点的值,这里假设广义表中的元素都是整数
    struct Node* next;      // 指向下一个节点的指针
    struct Node* sublist;  // 指向子表的指针
};

// 判断两个广义表是否相同的递归函数
bool Same(struct Node* g1, struct Node* g2) {
    // 如果两个广义表都为空,则认为它们相同
    if (g1 == NULL && g2 == NULL) {
        return true;
    }
    // 如果只有一个广义表为空,或者两个广义表的值不相等,则认为它们不相同
    if (g1 == NULL || g2 == NULL || g1->value != g2->value) {
        return false;
    }
    // 递归地比较两个广义表的子表
    return Same(g1->sublist, g2->sublist) && Same(g1->next, g2->next);
}

是的,判断两个广义表g1 和 g2 是否相同!
相同的条件为:节点要么同时为空,原子节点的数据相同,兄弟节点也是相同。