101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
思路
其实问题就是在第一个分叉后得到的两个子树是否时对称相等的,所以和 判断两个树是否相同一样,知识换成对称的位置对比。这里建立一个判断是否对称相同的函数iso2osame,将第一个节点后的两个子树带入即可。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root){
return true;
}
TreeNode* rootleft;
TreeNode* rootright;
rootleft = root->left;
rootright = root->right;
return iso2osame(rootleft,rootright);
}
bool iso2osame(TreeNode* root1,TreeNode* root2){
if(!root1 && !root2){return true;}
if(!root1 || !root2){return false;}
if(root1->val != root2->val){return false;}
return iso2osame(root1->left,root2->right) && iso2osame(root1->right,root2->left);
}
};