题解 | #JZ28 对称的二叉树#
对称的二叉树
http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
//使用两个向量分别存储根节点->左节点->右节点和根节点->右节点->左节点的层遍历,如果相同则对称
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot) {
vector<TreeNode*> lrvec, rlvec;
//根左右的层遍历存储,空子节点也要存储
lrvec.push_back(pRoot);
for (int i=0; i<lrvec.size(); ++i) {
TreeNode *node = lrvec[i];
if (node) {
lrvec.push_back(node->left);
lrvec.push_back(node->right);
}
}
//根右左层遍历存储,空子节点也要存储
rlvec.push_back(pRoot);
for (int i=0; i<rlvec.size(); ++i) {
TreeNode *node = rlvec[i];
if (node) {
rlvec.push_back(node->right);
rlvec.push_back(node->left);
}
}
//比较两种遍历方式的结果是否相同
for (int i=0; i<lrvec.size(); ++i) {
TreeNode *l = lrvec[i], *r = rlvec[i];
if (l == nullptr || r == nullptr) {
if (l != r) return false;
} else if (l->val != r->val) {
return false;
}
}
return true;
}
};