您的位置:首页 > 其它

Symmetric Tree

2015-06-19 16:49 330 查看
Description:

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

Code:

bool isSymmetric(TreeNode* root) {
if ( root == NULL )
return true;

stack<TreeNode *>preOrder;
stack<TreeNode *>mirrorPreOrder;
preOrder.push( root );
mirrorPreOrder.push( root );

while( !preOrder.empty() && !mirrorPreOrder.empty() )
{
TreeNode * p = preOrder.top();
TreeNode * q = mirrorPreOrder.top();
preOrder.pop();
mirrorPreOrder.pop();

if ( p->val != q->val
|| (p->right ==NULL && q->left)
|| (p->right && q->left == NULL)
|| (p->left == NULL && q->right)
|| (p->left && q->right==NULL))
return false;
else
{
if ( p->right && q->left )
{
preOrder.push( p->right );
mirrorPreOrder.push( q->left );
}
if (p->left && q->right )
{
preOrder.push( p->left );
mirrorPreOrder.push( q->right );
}
}
}
//注意检验是否两棵树都访问完毕
if ( preOrder.empty() && mirrorPreOrder.empty() )
return true;
else
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: