C++ 中的对称树


假设我们有一个二叉树,任务是检查它是否构成自身的镜像。对称二叉树构成其自身的镜像。

例如

输入-1

           

输出

True

解释

由于给定的二叉树构成其自身的镜像,因此输出为 True。

输入-2:


输出

False

解释

由于给定的二叉树没有构成其自身的镜像,因此它不是对称的。

解决此问题的方法

对称二叉树是一棵树,它是其自身的镜像,这意味着我们必须检查树的左右节点是否相同。

布尔函数将首先检查左节点和右节点。如果节点为空或为 NULL,则返回 True。对于其他情况,我们将检查它是否有左或右子节点,然后它们必须相同,以便它成为对称树。

  • 取一个包含根及其子节点的二叉树。
  • 布尔辅助函数 helper(node*root1, node*root2) 获取同一棵树的两个根,这有助于检查左子节点和右子节点是否相同。
  • 如果树为空或为 NULL,则返回 True。
  • 递归检查树的左节点和右节点是否相等。
  • 如果不满足上述所有条件,则返回 False。

示例

在线演示

#include<bits/stdc++.h>
using namespace std;
struct treenode {
   int data;
   treenode * left;
   treenode * right;
};
struct treenode * createNode(int d) {
   struct treenode * root = new treenode;
   root -> data = d;
   root -> left = NULL;
   root -> right = NULL;
   return root;
}
bool helper(struct treenode * root1, struct treenode * root2) {
   if (root1 == NULL and root2 == NULL)
      return true;
   if (root1 and root2 and root1 -> data == root2 -> data)
      return (helper(root1 -> left, root2 -> right) and helper(root1 -> right, root2 -> left));
   return false;
}
bool isSymmetry(struct treenode * root) {
   return helper(root, root);
}
int main() {
   struct treenode * root = NULL;
   root = createNode(4);
   root -> left = createNode(2);
   root -> right = createNode(2);
   root -> left -> right = createNode(7);
   root -> left -> left = createNode(5);
   root -> right -> left = createNode(5);
   root -> right -> right = createNode(7);
   if (isSymmetry(root)) {
      cout << "True" << endl;
   } else {
      cout << "False" << endl;
   }
   return 0;
}

运行以上代码将生成以下输出:

输出

False

解释

由于给定的树不是对称的,因此我们得到输出 False。

更新于: 2021年2月23日

569 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告