给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
思路:1.确定递归函数的参数和返回值
2.终止条件
左节点为空,右节点不为空,不对称,return false
左不为空,右为空,不对称 return false
左右都为空,对称,返回true
此时已经排除掉了节点为空的情况,那么剩下的就是左右节点不为空:
左右都不为空,比较节点数值,不相同就return fals
3.递归的逻辑
后序
先比较外部
再比较内部是否相等
内外部都相等才是对称二叉树
C++代码实现:
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right) {
// 首先排除空节点的情况
if(left==NULL&&right==NULL) return true;
if(left!=NULL&&right==NULL) return false;
if(left==NULL&&right!=NULL) return false;
if(left->val!=right->val) return false;
bool outside=compare(left->left,right->right);
bool inner=compare(left->right,right->left);
bool isSame=outside&&inner;
return isSame;
}
bool isSymmetric(TreeNode* root) {
if (root == NULL) return true;
return compare(root->left, root->right);
}
};