📜  门| GATE-CS-2003 |问题27(1)

📅  最后修改于: 2023-12-03 15:28:41.983000             🧑  作者: Mango

Gates-CS-2003 | 问题 27

这是一个有关于树的问题,让我们看看这个树的数据结构:

struct node
{
    int key_value;
    node *left;
    node *right;
};

现在,我们的问题是写一个函数,判断一个二叉树是不是对称的,我们需要考虑左右子树是否完全对称,包括根节点和子树的值是否相等,其中null节点也算一种情况。

我们可以设计以下递归函数:

bool is_symmetric(node *root)
{
    if(root == NULL)
        return true;
    return is_symmetric_helper(root->left, root->right);
}

这个递归函数的核心是一个辅助函数,它将会递归的检查左右子树是否对称。

bool is_symmetric_helper(node *left, node *right)
{
    if(left == NULL && right == NULL)
        return true;
    else if(left == NULL || right == NULL)
        return false;
    else if(left->key_value != right->key_value)
        return false;
    else
        return is_symmetric_helper(left->left, right->right) && is_symmetric_helper(left->right, right->left);
}

这个递归函数首先判断左右子树是否都为空,如果是,则返回true。

如果左右子树其中一个为NULL,则说明不是对称的,返回false。

如果左右子树的值不相等,也不是对称的,返回false。

如果左右子树完全对称,则继续检查子树是否对称,否则返回false。

以上就是对于Gates-CS-2003 | 问题 27的解答,你可以使用以上代码进行验证。