给你一个二叉树的根节点 root
, 检查它是否轴对称。
题解:要确认是否对称,其实就是要同时遍历左右两边的子树,若某一侧的某个节点与其对称的节点不同,则返回false。
先比较根节点的左右节点,若相同则开始递归遍历,比较左子树的左子树与右子树的右子树是否相等,左子树的右子树与右子树的左子树是否相等,递归完若这两条支线都相等且返回了true,则表示整个是对称的,返回true。
递归代码如下:
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right){
if(NULL == left && NULL != right) return false;
else if(NULL != left && NULL == right) return false;
else if(NULL == left && NULL == right) return true;
else if(left->val != right->val) return false;
else return compare(left->left,right->right)&&compare(left->right,right->left);
}
bool isSymmetric(TreeNode* root) {
if (NULL == root) return true;
return compare (root-> left, root->right);
}
};
注意:
1)注意判断传入的根节点是否为NULL;
2)if else if else if else 语句是有顺序的,从上往下依次判断,所以若没完全判断好节点是否为NULL的情况下,就不能判断节点的val。