1099. Build A Binary Search Tree (30)[bst二叉搜索树]

2023-12-02 15:58

本文主要是介绍1099. Build A Binary Search Tree (30)[bst二叉搜索树],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 原题: https://www.patest.cn/contests/pat-a-practise/1099

2. 思路:

题意:
给出二叉搜索树的结构及结点的值,求出层序序列。
思路:
首先我们要知道BST的中序是升序序列,这样的话,我们就知道了
BST的中序序列。
所以有多种方法。可以构建树,然后再中序遍历同时回填元素值。
也可以不用,因为已经知道了结构,可以用数组模拟二叉树的形式中序遍历,再回填值。
最后用队列层序输出。
这里用第二个简便些。
已AC。

3. 源码:

#include<iostream>
#include<vector>
#include<algorithm>//使用sort函数
#include<queue>
using namespace std;struct Node
{int val;//该结点的值int left, right;//分别为左右结点的编号
};
int N, index = 0;//分别为结点数,中序遍历时的索引
vector<Node> T;//数组表示二叉树
vector<int> inor;//存储中序遍历的序列void levelTraversal(int root);//层序遍历输出
void Inorder(int root);//中序遍历给结点赋值int main(void)
{//freopen("in.txt", "r", stdin);cin >> N;T.resize(N);//数组表示二叉树inor.resize(N);//存储中序遍历的序列for (int i = 0; i < N; i++)//读入数据cin >> T[i].left >> T[i].right;for (int i = 0; i < N; i++)cin >> inor[i];sort(inor.begin(), inor.end());//升序Inorder(0);//中序遍历给结点赋值levelTraversal(0);//层序遍历输出return 0;
}void Inorder(int root)//递归中序遍历给结点赋值
{if (root == -1)//递归结束条件return;Inorder(T[root].left);//遍历左结点T[root].val = inor[index++];//赋值Inorder(T[root].right);//遍历右结点return;
}void levelTraversal(int root)//层序遍历输出
{queue<int> Q;Q.push(root);cout << T[root].val;while (!Q.empty()){int id = Q.front();Q.pop();if (T[id].left != -1){Q.push(T[id].left);cout << ' ' << T[T[id].left].val;}if (T[id].right != -1){Q.push(T[id].right);cout << ' ' << T[T[id].right].val;}}cout << endl;return;
}


这篇关于1099. Build A Binary Search Tree (30)[bst二叉搜索树]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445929

相关文章

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =