题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:针对二叉树的前序遍历定义一种对称的遍历算法:先遍历父节点,再遍历其右子节点,最后遍历左子节点。如果一个二叉树的前序遍历结果和对称遍历算法结果相同,那么这个二叉树便是对称的。
代码(已在牛客网AC):
boolean isSymmetrical(TreeNode pRoot)
{
return isSymmetrical(pRoot, pRoot);
}
boolean isSymmetrical(TreeNode pRoot1, TreeNode pRoot2)
{
if(pRoot1 == null && pRoot2 == null)
return true;
if(pRoot1 == null || pRoot2 == null)
return false;
if(pRoot1.val != pRoot2.val)
return false;
return isSymmetrical(pRoot1.left, pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left);
}