对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
bool isSymmetric(TreeNode* root) {
//如果是空树
if (!root) {
return true;
}
return Helper(root->left, root->right);
}
//此函数比较二叉树中位置对称的两个节点
bool Helper(TreeNode* left, TreeNode* right)
{
//结束条件1:如果对称两个节点都为空,则返回true
if (!left && !right) {
return true;
}
//结束条件2:如果单独一个节点为空,另一个节点不为空,则返回false
if (!left || !right) {
return false;
}
//结束条件3:对称节点间的val值不等,则返回false
if (left->val != right->val) {
return false;
}
//该层符合对称二叉树的要求,开始比较下一层
return Helper(left->left, right->right) && Helper(left->right, right -> left);
}