N元树中的同构性

同构被定义为两棵树具有相同或镜像结构。在镜像结构的情况下,左节点的数据将始终与右节点匹配。例如,我们将取一个最接近镜像的数字,看看它的反向是什么,这就是同构的真正概念。

在本文中,我们将检查两个不同的二叉树是否同构。

让我们以N叉树的同构为例-

N元树中的同构性

请注意,L代表左节点,而R代表右节点

左侧最左第二分区的P和Q树的镜像结构

N元树中的同构性

这两个图示展示了它们如何通过给出四个匹配条件(P和Q的根节点)来彼此同构。

左-左节点可以匹配。

要么可以匹配右-右节点。

左右节点均可匹配。

要么右左无法匹配。

语法

程序中使用了以下语法−

struct name_of_structure{   data_type var_name;      // data member or field of the structure.}

参数

struct − 这个关键字用于表示结构数据类型。

name_of_structure − 我们为结构提供任何名称。

结构是将各种相关变量集中在一个地方的集合。

算法

我们将使用一个名为‘iostream’的头文件来开始程序。

我们正在创建名为‘tree_node’的结构,其中包含整数类型‘d’和初始化指针变量- ‘l’‘r’,分别表示左右子节点的数据。

现在我们使用一个名为‘create_node()’的函数创建另一个结构,该函数接受一个名为‘data’的参数来指定根节点的值。同时,我们创建一个名为‘tree_node’的指针,并使用给定的数据来初始化左子节点和右子节点的指针为空,并返回根节点。使用这个函数,我们将插入左子节点和右子节点的节点。

我们正在创建一个名为‘check_isomorphism_tree 的函数,它使用布尔数据类型,以两个tree_node指针pq作为输入参数,并返回一个布尔值。在其中,我们两次创建一个“if语句”来检查p中的数据是否等同于q中的数据。

检查p和q是否都为null,如果是,则返回true,因为树是同构的。

检查 p 或 q 中是否有任何一个为 null,如果是,则返回 false,因为这两棵树不是同构的。

‘check_isomorphism_tree’函数中,我们使用逻辑运算符“&&”和“||”递归检查节点‘p’‘q’的所有可能的左右子节点组合。

我们从主函数开始,创建两个树节点“p”和“q”来提供信息。

在主函数中,我们使用if语句调用‘check_isomorphism_tree’函数,并传递给定的参数p和q来验证这些整数值是否同构。如果它们是同构的,则打印语句为“这个给定的节点信息将生成同构树”,否则相反。

Example

的中文翻译为:

示例

在这个程序中,我们将检查两个二叉树是否同构。

#includeusing namespace std;struct tree_node{   int d;   tree_node*l;  // l = left   tree_node*r;  // r = right};struct tree_node* create_node(int data){   struct tree_node*root= new tree_node;   root->d= data;   root->l= NULL;   root->r= NULL;   return root;    }bool check_isomorphism_tree(tree_node*p, tree_node*q)  {// p and q both are different tree   if(p==NULL and q==NULL){      return true;   }   if(p==NULL or q==NULL){      return false;   }   // return all the possible condition    return (p->d==q->d && ((check_isomorphism_tree(p->l,q->r)&& check_isomorphism_tree(p->r,q->l))||(check_isomorphism_tree(p->l,q->l)&& check_isomorphism_tree(p->r,q->r))));}int main(){   // Tree of root pstruct tree_node *p = create_node(10);    p->l  = create_node(5);    p->r = create_node(4);    p->l->l = create_node(11);    p->r->r = create_node(12);   p->l->r = create_node(51);    p->r->l = create_node(6);    p->l->r->l = create_node(7); // left->right->left   p->l->l->l = create_node(9); // left->left->left   // Tree of root q   struct tree_node *q = create_node(10);    q->l  = create_node(5);    q->r = create_node(4);    q->l->l = create_node(11);    q->r->r = create_node(12);   q->l->r = create_node(51);    q->r->l = create_node(6);    q->l->r->l = create_node(7);    q->l->l->l = create_node(9);   if(check_isomorphism_tree(p,q)){      cout<<"This given information of node will make isomorphism tree"<<endl;   } else {      cout<<" This given information of node will not make isomorphism tree "<<endl;   }   return 0;}

输出

This given information of node will make isomorphism tree

结论

在这个程序中,我们理解了N叉树中同构的概念。我们看到了如何使用结构来表示树节点,以及使用左-左节点、右-左节点、左-右-左节点等来构建树,以下操作有助于满足树的同构性质。

以上就是N元树中的同构性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:17:07
下一篇 2025年12月10日 07:10:47

相关推荐

  • 检查一个数字是否为Munchhausen数

    孟希豪森数是具有独特属性的奇数。如果一个数字的各位数字之和(其自身的幂)等于原始数字,则该数字被认为是明克豪森数字。这些数字并不常见,而且其中很多都不为人所知。如果使用00 = 0的定义,那么0也可以被认为是孟希豪森数。 下面的文章提供了一种方法来确定一个数字是否是明克豪森数,同时牢记明克豪森数的这…

    2025年12月17日
    000
  • C语言中的嵌套结构是什么?

    结构内的结构(或)嵌套结构 另一个结构内的结构称为嵌套结构。 考虑以下示例, > struct emp{ int eno; char ename[30]; float sal; float da; float hra; float ea;}e; 所有属于配额的项目都可以组合在一起并在子结构下申…

    2025年12月17日
    000
  • C++程序将一个数组推入另一个数组中

    A linear sequential data structure called an array is used to store homogeneous data in a series of memory regions. An array needs to have certain fea…

    2025年12月17日
    000
  • 在C语言中,什么是标识符?

    标识符用于程序中的任何变量、函数、数据定义、标签等。 在开始任何语言之前,您至少必须知道如何命名标识符。 在C语言中,标识符是字母数字字符的组合,即首先以字母或下划线开头,其余为字母、任意数字或下划线。标识符命名规则 标识符命名必须遵循的规则如下 – 字母字符的大小写是重要的。例如,对变…

    2025年12月17日
    000
  • 用户程序的多步处理

    计算机系统必须将用户的高级编程语言程序转换为机器代码,以便计算机的处理器可以运行它。多步处理是一个术语,用于描述将用户程序转换为可执行代码所涉及的多个过程。 用户程序在其多步骤处理过程中通常会经历许多不同的阶段,包括词法分析、句法分析、语义分析、代码创建、优化和链接。为了将用户程序从高级形式转换为可…

    2025年12月17日
    000
  • 子集相等性是NP完全的

    子集对应,也称为“子集总计”问题,是一个示例性的 NP 完全计算问题。给定一堆数字和一个客观价值,任务是确定是否存在其总数等于客观价值的数字子集。该问题的 NP 顶峰源于其通过多项式时间递减来解决各种其他 NP 完全问题的能力。不管其简单的定义如何,没有一种有效的计算可以解决所有事件的“子集对应”,…

    2025年12月17日
    000
  • AI应用再度崛起,文心一言再次登顶!

    据《科创板日报》,8月30日,首批8家大模型通过《生成式人工智能服务管理暂行办法》备案,分别为上海地区三家——商汤的“商量sensechat”、minimax的abab大模型、上海人工智能实验室的书生通用大模型,北京地区五家——百度文心一言、抖音的云雀大模型、百川智能的百川大模型、清华系ai公司智谱…

    2025年12月1日 科技
    000
  • 在赵巷公园里,孩子们邂逅了一场智能机器人的探秘之旅

    作为赵巷人的“后花园”,赵巷公园一直是周边社区居民热爱的小憩之地。公园内水波荡漾、树影摇曳,营造出秋日浪漫氛围。10月28日,在公园的趣汇楼里,赵巷镇举办的“探秘%ignore_a_1%”活动,吸引了辖区20组家庭参与,孩子们在这场科技感十足的手工制作中对智能机器人的知识进行了一次过瘾的探秘之旅。 …

    2025年12月1日 科技
    000
  • 调用SQL触发器执行外部程序

    标题:SQL触发器%ignore_a_1%的具体代码示例 正文:在使用SQL触发器时,有时候需要调用外部程序来处理一些特定的操作。本文将介绍如何在SQL触发器中调用外部程序,并给出具体的代码示例。 一、创建触发器首先,我们需要创建一个触发器来监听数据库中的某个事件。这里以“订单表(order_tab…

    2025年11月17日
    000
  • 在 React Query 中使用数据库进行数据筛选和排序

    在 React Query 中使用数据库进行数据筛选和排序 React Query 是一个用于管理数据的库,它的强大之处在于可以与数据库进行交互,实现数据筛选和排序的功能。在本文中,我们将演示如何在 React Query 中使用数据库进行数据筛选和排序的具体示例。 首先,为了演示方便,我们假设使用…

    2025年11月9日 web前端
    000
  • 对话系统中的上下文生成问题

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 对话系统中的上下文生成问题,需要具体代码示例 引言:对话系统是人工智能领域中的一个重要研究方向,它旨在实现人机之间自然流畅的对话交流。一个好的对话系统不仅需要能够理解用户的意图,还需要能够根据上…

    2025年11月8日 科技
    100
  • 麒麟9000s的综合性能分析

    麒麟9000s的综合性能分析 随着科技的不断进步和智能化的发展,手机作为人们生活中不可或缺的设备,其性能和体验也变得日益重要。华为作为中国手机市场的领军企业之一,一直致力于推动手机技术的发展与创新。而其最新推出的麒麟9000s处理器,作为其旗舰级芯片,备受瞩目。麒麟9000s的综合性能究竟如何?我们…

    2025年11月4日
    000

发表回复

登录后才能评论
关注微信