Description
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
Example
This binary tree [1,2,2,3,4,4,3] is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1
/ \
2 2
\ \
3 3
Solution 1(C++)
class Solution {
public:
bool travel(TreeNode* nodel, TreeNode* noder){
if(!nodel && !noder) return true;
else if(!nodel || !noder) return false;
if(nodel->val != noder->val) return false;
else return (travel(nodel->left, noder->right) && travel(nodel->right, noder->left));
}
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return travel(root->left, root->right);
}
};
Solution 2(C++)
static int key = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
return 0;
}();
class Solution {
public:
bool symmetricTree(TreeNode * leftNode, TreeNode * rightNode) {
if (!leftNode && !rightNode) return true;
if (!leftNode || !rightNode || leftNode->val != rightNode->val)return false;
return symmetricTree(leftNode->left, rightNode->right) && symmetricTree(leftNode->right, rightNode->left);
}
bool isSymmetric(TreeNode* root) {
if (!root) return true;
return symmetricTree(root->left, root->right);
}
};
算法分析
两个节点,按照相反方向遍历,每次比较值是否一样与是否都为空。即可。
程序分析
略。