Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
--- this is a problem on leetcode
https://oj.leetcode.com/problems/symmetric-tree/
#include <iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
TreeNode() {}
};
class Solution {
public:
bool compareNodes(TreeNode *nodeL, TreeNode *nodeR) {
if (nodeL == NULL && nodeR == NULL)
return true;
if (nodeL == NULL || nodeR == NULL)
return false;
return nodeL->val == nodeR->val && compareNodes(nodeL->left, nodeR->right) &&
compareNodes(nodeL->right, nodeR->left);
}
bool isSymmetric(TreeNode *root) {
if (root == NULL) {
return true;
}
return compareNodes(root->left, root->right);
}
};
TreeNode *createTree() {
TreeNode *tree = new TreeNode();
int data;
cout << "input data" << endl;
cin >> data;
if (data == 0) {
return NULL;
}
else {
tree->val = data;
tree->left = createTree();
tree->right = createTree();
}
return tree;
}
void main() {
TreeNode *root;
root = createTree();
Solution slt;
slt.isSymmetric(root);
}