失败的尝试
一开始的思路是,层次遍历,然后对每一行进行回文判断。
出现了两个问题:
- 退出条件无法决定,因为树可以有NULL
- 回文无法判断,原因同上
抄答案
同时对左右子树进行层次遍历
class Solution {
public:
bool isSymmetric(TreeNode* root) {
queue<TreeNode*> queue;
queue.push(root);
queue.push(root);
while(!queue.empty()){
TreeNode *t1 = queue.front(); queue.pop();
TreeNode *t2 = queue.front(); queue.pop();
if (t1 == NULL && t2 == NULL) continue; // 0 0
if (t1 == NULL || t2 == NULL) return false; // 0 1 || 1 0
if (t1->val != t2->val) return false; // 1 1
queue.push(t1->left);
queue.push(t2->right);
queue.push(t1->right);
queue.push(t2->left);
}
return true;
}
};
层次遍历
void levelTraverse(TreeNode * root){
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode *temp = q.front(); q.pop();
//visit(temp);
if(temp->left) q.push(temp->left);
if(temp->right) q.push(temp->right);
}
}
递归
class Solution {
public:
bool isMirror(TreeNode *t1, TreeNode*t2){
if(!t1 && !t2) return true; //0 0
if(!t1 || !t2) return false; //1 0 || 0 1
return (t1->val == t2->val) //1 1
&& isMirror(t1->right, t2->left) && isMirror(t1->left, t2->right);
}
bool isSymmetric(TreeNode* root) {
return isMirror(root, root);
}
};