给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
C++代码如下:
class Solution {
public:
bool isSame(TreeNode* nL, TreeNode* nR) {
if (!nL && !nR)
return true;
if(nL && nR && nL->val == nR->val)
return isSame(nL->left, nR->right) && isSame(nL->right, nR->left);
return false;
}
bool isSymmetric(TreeNode* root) {
if (root)
return isSame(root->left, root->right);
else
return true;
}
};
如果root是空则返回true,如果不是空则遍历它的左右子节点:
1.当左右子节点都为空时,则是对称,返回true.
2.当左右子节点存在且值相等时,递归判断左叶子节点的左孩子与右叶子节点的右孩子是否相同,和左叶子节点的右孩子与右叶子节点的左孩子是否相同,只有都相同才返回true.
3.当左右子节点只存在一个时,不对称,返回false.