标签说是dfs的,不过我就用层次遍历写了。。
class Solution {
public:bool isLevelSym(vector<TreeNode*> arr){
if(arr.empty()||arr.size()==1)
return true;
if(arr.size()%2==1)
return false;
bool res=true;
for(unsigned i=0,j=arr.size()-1;i<j;i++,j--){
if(arr[i]==NULL&&arr[j]==NULL)
continue;
else if(arr[i]==NULL||arr[j]==NULL||arr[i]->val!=arr[j]->val){
res=false;
break;
}
}
return res;
}
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return true;
bool res=true;
int curCnt=0,nextCnt=1;
queue<TreeNode*> queue;
vector<TreeNode*> arr;
queue.push(root);
while(!queue.empty()){
curCnt=nextCnt;
nextCnt=0;
while(curCnt>0){
TreeNode* t=queue.front();
queue.pop();
curCnt--;
arr.push_back(t);
if(t){
queue.push(t->left);
queue.push(t->right);
nextCnt+=2;
}
}
if(!isLevelSym(arr)){
res=false;
break;
}
arr.clear();
}
return res;
}
};
看别人的,递归解法
class Solution {
public:
bool solve(TreeNode* leftNode,TreeNode* rightNode){
if(leftNode==NULL&&rightNode==NULL)
return true;
if(leftNode==NULL||rightNode==NULL)
return false;
return leftNode->val==rightNode->val&&solve(leftNode->left,rightNode->right)&&solve(leftNode->right,rightNode->left);
}
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return true;
return solve(root->left,root->right);
}
};