题目描述:
最开始的想法是中序遍历存到vector里,然后前后同时扫面判断vector是否对称。代码如下:
/**
* 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:
vector<int> result;
void inOrderTraverse(TreeNode* root)
{
if(!root)return;
inOrderTraverse(root->left);
result.push_back(root->val);
inOrderTraverse(root->right);
}
bool isSymmetric(TreeNode* root) {
inOrderTraverse(root);
for(int i=0,j=result.size()-1;i<=j;i++,j--)
{
if(result[i]!=result[j])
return false;
}
return true;
}
};
这种做法忽略了一种特殊情况:
这种情况下,vector中的元素也是对称的
对于这种情况,可以加一个层级判断,代码如下:
/**
* 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:
vector<int> result;
vector<int> depthflag;//层级判断
void inOrderTraverse(TreeNode* root, int depth)
{
if(!root)return;
inOrderTraverse(root->left, depth+1);
result.push_back(root->val);
depthflag.push_back(depth);
inOrderTraverse(root->right, depth+1);
}
bool isSymmetric(TreeNode* root) {
inOrderTraverse(root, 1);
for(int i=0,j=result.size()-1;i<=j;i++,j--)
{
if(result[i]!=result[j] || depthflag[i]!=depthflag[j])
return false;
}
return true;
}
};
结果如下: