您的位置:首页 > 其它

【二叉树11】判断一颗二叉树本身是否为镜像

2013-09-11 11:59 357 查看
【问题】如题目


output : true


output : false

【code】

bool isSymmetricHelper(TreeNode *rnode, TreeNode *lnode) {
if ((lnode || rnode) == NULL)
return true;
if ((lnode && rnode) == NULL)
return false;
if (lnode->val == rnode->val)
return isSymmetricHelper(lnode->left, rnode->right) &&
isSymmetricHelper(lnode->right, rnode->left);
else
return false;
}
bool isSymmetric(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (root == NULL)
return true;
return isSymmetricHelper(root->right, root->left);
}


大牛们非递归的方法如下,实际上是模拟递归的思路,先建立两个栈,分别存放左子树和右子树

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

queue<TreeNode *> lf, rt;
lf.push(root->left);
rt.push(root->right);
TreeNode *l, *r;
while(!lf.empty() && !rt.empty()) {
l = lf.front(); r = rt.front();
lf.pop(); rt.pop();
if(l == NULL && r == NULL) continue;
if(l == NULL || r == NULL) return false;
if(l->val != r->val) return false;
lf.push(l->left); lf.push(l->right);
rt.push(r->right); rt.push(r->left);
}
if(lf.empty() && rt.empty()) return true;
else return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐