题目描述:
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1
/ \
2 2
/ \ / \
3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1
/ \
2 2
\ \
3 3
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
思路:
如果一棵树是对称二叉树,那么它的中序遍历序列是关于对称轴对称的。
实现(C++):
/**
* 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:
void nodeVal(vector<int> &nodeValues, TreeNode* root){ //中序遍历记录二叉树结点的值
if(root!=NULL){
nodeVal(nodeValues, root->left);
nodeValues.push_back(root->val);
nodeVal(nodeValues, root->right);
}
}
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)
return true;
vector<int> nodeValues; //用于记录二叉树结点的值
nodeVal(nodeValues, root); //中序遍历记录二叉树结点的值
int length=nodeValues.size();
if(length==1)
return true;
for(int i=0; i<length/2; i++) //判断中序遍历序列是否对称
if(nodeValues[i]!=nodeValues[length-i-1])
return false;
return true;
}
};
自以为代码无懈可击,然而出现了下面的问题:
神奇!!!该实例的输出与预期一样,然而系统提示未通过。