📅  最后修改于: 2023-12-03 15:28:41.983000             🧑  作者: Mango
这是一个有关于树的问题,让我们看看这个树的数据结构:
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的解答,你可以使用以上代码进行验证。