题目
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
来源:力扣(LeetCode)
思路
判断二叉树是否是平衡树,比如有两个节点node1, node2;
首先,比较node1的左子节点的值与n2的右子节点的值是否相等;
同时,还需要比较node1的右子节点的值和node2的左子结点的值是否相等;
以此类推,比较完所有节点的左右两个子节点;
可以使用递归和迭代两种方法来实现。
C++代码
class Solution {
public:
bool isSymmetric(TreeNode* root)
{
if (!root)
{
return true;
}
return isSymmetric(root -> left, root -> right);
}
bool isSymmetric(TreeNode *left, TreeNode *right)
{
if (!left && !right)
{
return true;
}
if (left && !right || !left && right || left -> val != right -> val)
{
return false;
}
return isSymmetric(left->left, right->right) && isSymmetric(left->right, right->left);
}
};