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
判断一棵树是否为镜像对称的。
我的做法是:
把左子树按“根左右”的顺序遍历一遍,把沿途的数值记录下来(空值记为特殊符号'a')。
把右子树按“根右左”的顺序遍历一遍,把沿途的数值记录下来(空值记为特殊符号'a')。
看两个字符串相不相等。
class Solution {
public:
bool isSymmetric(TreeNode *root) {
string leftFirst = "";
string rightFirst = "";
LRtraversal(root,leftFirst);
RLtraversal(root,rightFirst);
return leftFirst == rightFirst;
}
private:
void LRtraversal(TreeNode *root, string& seq) {
if(root==NULL) {
seq+='a';
return;
}
seq += root->val + '0';
LRtraversal(root->left, seq);
LRtraversal(root->right, seq);
}
void RLtraversal(TreeNode *root, string& seq) {
if(root==NULL) {
seq+='a';
return;
}
seq += root->val + '0';
RLtraversal(root->right, seq);
RLtraversal(root->left, seq);
}
};