如果一颗二叉树和它的镜像一样,那么它是对称的。实现一个函数,用来判断一颗二叉树是不是对称的。
首先定义一种前序遍对称的算法,先遍历一棵二叉树的根结点,再遍历它的右子结点,最后遍历它的左子结点。
以下面两棵树为例:
对于树A,可以图中看出它明显对称。它的前序遍历序列为{1,2,3,4,2,4,3},前序对称遍历序列为{1,2,3,4,2,4,3},可以发现它的前序序列和对称序列一样。
对于树B,可以图中看出它不对称。它的前序遍历序列为{1,2,4,5,3,6,7},前序对称遍历序列为{1,3,7,6,2,5,4},可以发现它的前序序列和对称序列不一样。
通过对两个二叉树的比较可以得出通过比较二叉树的前序序列和前序对称序列来判断二叉树是否对称,如果两个序列相等,则这个树是对称二叉树。
代码如下:
bool isSymmetrical2(BSTreeNode *root1, BSTreeNode * root2)
{
if (root1 == NULL&&root2 == NULL)
{
return true;
}
if (root1 == NULL||&root2 == NULL)
{
return false;
}
if (root1->data!=root2 ->data)
{
return false;
}
return isSymmetrical2(root1->left, root2->right) &&
isSymmetrical2(root1->right, root2->left);
}
bool isSymmetrical(BSTreeNode * root)
{
return isSymmetrical2(root, root);
}