Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
递归,将左节点的右孩子和右节点的左孩子,和左节点的左孩子右节点的右孩子进行比较
class Solution {
public:
bool dfs(TreeNode*leftnode, TreeNode*rightnode)
{
if (!leftnode&&!rightnode)//都为空
{
return true;
}
if (leftnode==NULL||rightnode==NULL)//其中一个为空肯定是不对称的
{
return false;
}
//左节点的右孩子和右节点的左孩子,和左节点的左孩子右节点的右孩子进行比较
return leftnode->val == rightnode->val&&dfs(leftnode->left, rightnode->right) && dfs(leftnode->right, rightnode->left);
}
bool isSymmetric(TreeNode* root) {
if (root == NULL) return true;
return dfs(root->left, root->right);
}
};