二叉树左右成镜像对称,不一定是满树。如图:
code:
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// ========== 递归 ==========
bool check(TreeNode *p, TreeNode *q) {
if (!p && !q) return true;
if (!p || !q) return false;
return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
}
bool isSymmetric(TreeNode* root) {
return check(root, root);
}
// ========== 迭代 ==========
bool isSymmetric(TreeNode* root) {
if(nullptr == root) return true;
queue<TreeNode*> que;
que.push(root->left);
que.push(root->right);
while(!que.empty())
{
TreeNode* t1 = que.front();
que.pop();
TreeNode* t2 = que.front();
que.pop();
if(t1 == nullptr && t2 == nullptr)
continue;
if(t1 == nullptr || t2 == nullptr)
return false;
if(t1->val != t2->val) return false;
que.push(t1->left);
que.push(t2->right);
que.push(t1->right);
que.push(t2->left);
}
return true;
}
Ref: Leetcode 对称二叉树