题意:给你一棵树,判断这棵树是不是关于中心线对称的。
解题思路:
如果根节点为NULL,返回true。
如果根节点不为空,查看根节点的左子树与右子树是否对称,这时需重载本函数,参数变为两个指针。
如果这两个指针至少有一个为NULL,则返回这两个指针是否相等。
如果两个指针都不为空,则对比两个指针所指的节点的值,如果值相等,则查看该节点的左子树与相对应节点的右子树是否相等并且查看该节点的右子树与相应节点的左子树是否相等,递归进行。
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return root == NULL || isSymmetric(root->left, root->right);
}
bool isSymmetric(TreeNode* lroot, TreeNode* rroot)
{
if(lroot == NULL || rroot == NULL) return lroot == rroot;
return lroot->val == rroot->val && isSymmetric(lroot->left, rroot->right)
&& isSymmetric(lroot->right, rroot->left);
}
};