Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
#include<iostream>
using std::cout;
using std::endl;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
bool isSymmetric(TreeNode *root)
{
if (root == NULL)
{
return true;
}
else
{
return CheckTree(root->left, root->right);
}
}
bool CheckTree(TreeNode *p, TreeNode *q)
{
if (p == NULL && q == NULL)
return true;
if (p == NULL || q == NULL)
return false;
if (p->val == q->val)
{
if (CheckTree(p->left, q->right) && CheckTree(p->right, q->left))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
};
TreeNode& Build_Binary_Tree(unsigned long t_ulTreeDepth, int *t_ipSeq)
{
unsigned long ulSeqLen = (unsigned long)pow(2, t_ulTreeDepth) - 1;
TreeNode *TNpTree = (TreeNode*)malloc(sizeof(TreeNode));
TNpTree->val = t_ipSeq[0];
if (t_ulTreeDepth == 1)
{
TNpTree->left = NULL;
TNpTree->right = NULL;
}
else
{
TNpTree->left = &Build_Binary_Tree(t_ulTreeDepth - 1, &t_ipSeq[1]);
TNpTree->right = &Build_Binary_Tree(t_ulTreeDepth - 1, &t_ipSeq[(ulSeqLen + 1) / 2]);
}
return *TNpTree;
}
int main()
{
unsigned long ulTreeDepth = 3;
bool bResult;
Solution SoTree;
int iSeq1[7] = { 1, 2, 2, 0, 2, 0, 2 };
TreeNode *Tree = &Build_Binary_Tree(ulTreeDepth, iSeq1);
//Tree->right = NULL;
bResult = SoTree.isSymmetric(Tree);
if (bResult)
{
cout << "the tree is symmetric" << endl;
}
else
{
cout << "the tree is not symmetric" << endl;
}
system("pause");
}