错误代码:
class Solution {
public:
vector<int> xian(TreeNode* root,vector<int> a)
{
if(root->left!=NULL)
a=xian(root->left,a);
if(root->left==NULL && root->right!=NULL)
a.push_back(-1);
int i=root->val;
a.push_back(i);
if(root->right!=NULL)
a=xian(root->right,a);
if(root->right==NULL && root->left!=NULL)
a.push_back(-1);
return a;
}
bool isSymmetric(TreeNode* root) {
if ( root==NULL) return true;
if((root->left==NULL)&&(root->right==NULL)) return true;
//先序遍历
vector<int> a;
a=xian(root,a);
int num=a.size()/2;
int i=0;
for(i=0;i<num;i++)
{
if(a.at(i)==a.at(a.size()-i-1))
continue;
else
return false;
}
return true;
}
};
这样的状况对于 5 4 1 null 1 null 4 2 null 2 null是不行的,得到的是-1 4 2 1 -1 5 -1 1 2 4 1
最开始想到了结果方法,但是觉得太蠢了的感觉久没有那么做。发现,是我蠢了
争取方法:想要看树是否对称。其实就是看这个树的左中右是否等于右中左。
换句话说,我们同时看他的左边和右边,遍历一遍就可以了
class Solution {
public:
bool xian(TreeNode* root1,TreeNode* root2)
{
if(root1==NULL && root2==NULL)
return true;
if (root1!=NULL&&root2!=NULL&&root1->val==root2->val)
return xian(root1->left,root2->right)&&xian(root1->right,root2->left);
else return false;
}
bool isSymmetric(TreeNode* root) {
return xian(root,root);
}
};