WA1
测试案例:192/193通过率。。。。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
std::vector<int>inorder1;
std::vector<int>inorder2;
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
TreeNode* root2 = root;
in1(root);
in2(root2);
bool ans = true;
for(int i = 0;i<inorder1.size();i++){
if(inorder1[i]!=inorder2[i]){
ans = false;
break;
}
}
return ans;
}
void in1(TreeNode *root) {
if (root->left)
in1(root->left);
else
inorder1.push_back(-INT_MAX);
inorder1.push_back(root->val);
if (root->right)
in1(root->right);
else
inorder1.push_back(INT_MAX);
}
void in2(TreeNode *root) {
if (root->right)
in2(root->right);
else
inorder2.push_back(-INT_MAX);
inorder2.push_back(root->val);
if (root->left)
in2(root->left);
else
inorder2.push_back(INT_MAX);
}
};
WA2
122 / 193 个通过测试用例
bool isSymmetric(TreeNode *root) {
if(root==NULL)
return true;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int size = q.size();
vector<int> subqueue;
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
subqueue.push_back(node->val);
q.pop();
if(node->left)
q.push(node->left);
else
subqueue.push_back(INT_MAX);
if(node->right)
q.push(node->right);
else
subqueue.push_back(-INT_MAX);
}
vector<int> subqueue2(subqueue);
reverse(subqueue2.begin(),subqueue2.end());
for (int j = 0; j < subqueue.size(); ++j) {
if(subqueue[j]!=subqueue2[j])
return false;
}
}
return true;
AC1
bool isSymmetric(TreeNode* root) {
return isSymmetric2(root,root);
}
bool isSymmetric2(TreeNode* root1,TreeNode* root2){
if(root1==NULL&&root2==NULL)return true;
if(root2==NULL||root1==NULL)return false;
return (root1->val==root2->val)&&isSymmetric2(root1->left,root2->right)&&isSymmetric2(root1->right,root2->left);
}