C++算法入门练习——相同的二叉查找树

将第一组n​个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T1​;再将第二组n个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T2​。判断T1​和T2​​是否是同一棵二叉查找树。

二叉查找(搜索)树定义:

 ①要么二叉查找树是一颗空树。

②要么二叉查找树由根节点、左子树、右子树构成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据域都小于或等于根结点的数据域,右子树上所有的结点的数据域均大于根节点的数据域。

由定义可以发现这么一个二叉查找树的性质:

二叉查找树如果中序遍历(左儿子,根结点,右儿子)得到的必定是一个由小到大的有序序列。

而正是因为这么一个性质,才被称为查找树。

回到本题解题思路:

根据给定的两组数进行建立二叉查找树,然后进行先序遍历得到序列,若二者的先序遍历序列相等,则说明为同一棵树。

完整代码如下:

#include <iostream>
#include <vector>
using namespace std;struct node{int data;int lchild;int rchild;
}nodes[51];int nodecount = 0;
vector<int> tree1,tree2;void PreOrderTraverse(int root,vector<int>& tree){//注意要用引用,这样才改变内容,不然只是浅拷贝。if(root == -1){return;}tree.push_back(nodes[root].data);PreOrderTraverse(nodes[root].lchild,tree);PreOrderTraverse(nodes[root].rchild,tree);
}int newNode(int data){nodes[nodecount].data = data;nodes[nodecount].lchild = -1;nodes[nodecount].rchild = -1;return nodecount++;
}int insert(int root,int data){if(root == -1){//若根结点为-1,则说明找到了插入的位置。return newNode(data);}if(data<nodes[root].data){//利用二叉查找树的性质nodes[root].lchild = insert(nodes[root].lchild,data);}else{nodes[root].rchild = insert(nodes[root].rchild,data);}return root;
}int buildtree(int n,int data[]){nodecount = 0;int root = -1;//一开始树为空。for(int i=0;i<n;i++){root = insert(root,data[i]);}return root;
}int main(){int n;cin>>n;int data[n];for(int i=0;i<n;i++){cin>>data[i];}int root = buildtree(n,data);PreOrderTraverse(root,tree1);for(int i=0;i<n;i++){cin>>data[i];}root = buildtree(n,data);PreOrderTraverse(root,tree2);if(tree1==tree2){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/210722.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPRS电表和4G电表有哪些区别?

随着科技的不断进步&#xff0c;通信技术在智能电网中的应用越来越广泛。其中&#xff0c;GPRS电表和4G电表作为两种常见的远程智能抄表方案&#xff0c;为广大用户带来了便捷的用电管理体验。然而&#xff0c;这两种电表在技术特点、应用场景等方面存在一定差异。下面&#xf…

用rs-convert.exe提取d415拍摄的bag文件中的图片

首先给出intel官方说明&#xff0c;如图1. 使用过程&#xff1a;1.找到rs-convert.exe&#xff0c;一般都是在C:\Program Files (x86)\Intel RealSense SDK 2.0\tools。 2.打开文件夹后输入cmd&#xff0c;如图2&#xff0c;就会弹出命令窗口。 3.在命令窗口输入。 rs-conve…

Python入门教程之条件语句与运算符优先级详解

文章目录 Python 条件语句Python运算符优先级关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 Python 条件语句 …

操作系统实验一:进程和线程

文章目录 实验内容一、进程的创建1、编辑源程序2、编辑结果3、编译和运行程序4、解释运行结果 二、进程共享1、运行2、解释运行结果 三、进程终止1、运行2、解释运行结果 四、进程同步1、运行2、解释运行结果 五、Linux中子进程映像的重新装入1、运行2、解释运行结果 六、线程1…

baksmali使用

帮助文档&#xff0c;查看版本 baksmali可以用来反编dex文件 查看版本 反编译apk 可以在当前目录下面得到一个out目录 指定输出文件夹名称 反编译dex 反编译dex文件&#xff0c;得到汇编代码 baksmali du /home/kali/Desktop/classes.dex >out.txt

python爬虫中 HTTP 到 HTTPS 的自动转换

前言 在当今互联网世界中&#xff0c;随着网络安全的重要性日益增加&#xff0c;越来越多的网站采用了 HTTPS 协议来保护用户数据的安全。然而&#xff0c;许多网站仍然支持 HTTP 协议&#xff0c;这就给我们的网络爬虫项目带来了一些挑战。为了应对这种情况&#xff0c;我们需…

MySQL-01-MySQL基础架构

1-MySQL逻辑结构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图&#xff0c;有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构整体分为三层&#xff0c;最上层为客户端层&#xff0c;并非MySQL所独有&#xff0c;诸如&#xff1a;连接处…

vue实现聊天栏定位到最底部(超简单、可直接复制使用)

原理 通过watch监听聊天内容的加载&#xff0c;一旦加载完成或者数据更新触发vue的数据监听时&#xff0c;就重新修改【滚动滑钮到滚动条顶部的距离滚动条的高度】&#xff0c;从而实现定位到底部的效果。 实现 1、布局 新建一个div&#xff08;聊天框&#xff0c;如下&…

python3迭代器与生成器

迭代器 迭代是访问集合元素的一种方式&#xff0c;是一个可以遍历记住的位置的对象 迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法&#xff1a;iter&#xff08;&#xff09;和next&#x…

TIDB拓扑结构

TiDB Server&#xff1a;SQL层&#xff0c;负责接受客户端的连接&#xff0c;执行SQL解析和优化&#xff0c;最终生成分布式执行计划。TiDB Server为无状态的&#xff0c;可增加节点负载均衡。 PD (Placement Driver) Server&#xff1a;整个TiDB集群的元信息管理模块&#xf…

2023APMCM亚太杯数学建模选题建议及初步思路

大家好呀&#xff0c;亚太杯数学建模开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c;本次亚太杯推荐选择B题。 C题如果想做好&#xff0c;搜集数据难度并不低&#xff0c;并且模型比较简单&#xff0c;此外目前选择的人数过多&#xff0c…

G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器

G320E 低噪声电荷泵DC/DC转换器 产品概述&#xff1a; G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器&#xff0c;在输入电压范围在2.7V到5.0V的情况下&#xff0c;该器件可以产生5V的输出电压&#xff0c;最大输出电流达到300mA.G320E外部元件少&#xff0c;非常适合于…