请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:既然是对称的,那么二叉树的节点个数肯定是奇数,偶数排除。那么中序遍历的结果也肯定是对称的。所以,通过中序遍历,然后对称的值。当然要处理特殊情况啦。那就是存在单个孩子的节点,一个是左孩子,一个是右孩子,他们的值是相同的,这样就会出现判断错误的问题,那么我们在出现这种情况时,自己添加一个节点就可以了,这个节点的值就设置为INT_MAX。或者用其他方法处理了也是可以的。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector
vec;
void ldr(TreeNode *node)
{
if(!node)
{
TreeNode * no = new TreeNode(INT_MAX);
vec.push_back(no);
return;
}
if(!node->left&&!node->right)
{
vec.push_back(node);
return;
}
ldr(node->left);
vec.push_back(node);
ldr(node->right);
}
bool isSymmetrical(TreeNode* pRoot)
{
if(!pRoot)
return true;
ldr(pRoot);
if(vec.size()%2==0)
return false;
int mid = vec.size()/2;
TreeNode *left,*right;
for(int i= mid-1,j=mid+1;i>=0&&j
val!=right->val)
return false;
}
return true;
}
};