对称树就是基于根结点,左右两边的结点相同,就像照着镜子一样。
代码
我们来实现判断一颗二叉树是否是对称树,首先定义结点信息:
struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
以下是迭代版本的对称树判断:
bool isSymmetric(TreeNode* root) {
if (NULL == root) {
return true;
}
queue<TreeNode *> q;
q.push(root->left);
q.push(root->right);
while (!q.empty()) {
unsigned length = q.size();
for (unsigned i = 0; i < length / 2; ++i) {
TreeNode* l = q.front();
q.pop();
TreeNode* r = q.front();
q.pop();
if (NULL == l && NULL == r) {
continue;
}
else if (NULL == l || NULL == r) {
return false;
}
else if (l->val != r->val) {
return f