检查两个二叉树是否彼此镜像

时间:2019-05-15 17:25:22

标签: c++ data-structures tree binary-tree

我已经测试了使用根节点root创建给定树的镜像并返回镜像树的根的函数。我将此根存储在一个新变量mirrorRoot中。现在,我正在尝试编写一个函数,该函数检查两棵树是否彼此互为镜像。我恰好传递了这两个根节点rootmirrorNode,但结果是false

BinaryTreeNode* mirrorTree(BinaryTreeNode *root) {
  BinaryTreeNode *temp;
  if (root) {
    mirrorTree(root->left);
    mirrorTree(root->right);
    temp = root->left;
    root->left = root->right;
    root->right = temp;
  }
  return root;
}

这是我编写的代码,用于检查树木是否彼此互为镜像。

int areMirrorTree(BinaryTreeNode *root1, BinaryTreeNode *root2) {

  if (root1 == NULL && root2 == NULL)
    return 1;
  if (root1 == NULL || root2 == NULL)
    return 0;
  if (root1->data != root2->data)
    return 0;
  else
    return areMirrorTree(root1->left, root2->right) && areMirrorTree(root1->right, root2->left);
}

请帮助我找出我在做什么错误?

1 个答案:

答案 0 :(得分:0)

我发现我正在做的错误。我错误地用根节点root更新了我的旧树,并从函数中返回它并将其存储在新的变量名mirrorRoot中。最终,指针rootmirrorRoot表示与镜像树相同的树。这就是为什么我的areMirrorTree函数每次都返回false的原因。