Symmetric Tree
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.
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
利用递归法,可以很轻松解决的问题。
增加一个adaptor接口函数就可以了,
搞清楚对称的判断方法:每一个左子树与右子树的节点相等,然后是左子树的右子树和右子树的左子树相等, 有点拗口,不过画图就很好理解了。
bool isSymmetric(TreeNode *root)
{
if (!root) return true;
return symmetric(root->left, root->right);
}
bool symmetric(TreeNode *t1, TreeNode *t2)
{
if (!t1 && !t2) return true;
if (!t1 && t2 || t1 && !t2) return false;
if (t1->val != t2->val) return false;
return symmetric(t1->left, t2->right) && symmetric(t1->right, t2->left);
}