排序二叉树(c++)

排序二叉树是一棵有顺序,且没有重复元素的二叉树。

对每个节点而言:

如果左子树不为空,则左子树上的所有节点的权值都小于该节点的权值。
如果右子树不为空,则右子树上的所有节点的权值都大于该节点的权值。

上图为一棵排序二叉树。相信你已经发现,将排序二叉树上的节点的权值按照中序遍历顺序排列成的序列,一定是严格单调递增的。

下面我们来讲一下如何构造一棵排序二叉树,我们主要运用 DFS 的方法。

算法思想:

假定我们要将数值 X 插入二叉树中。

  1. 判断当前节点是否为空节点,若为空,则将 X 插入到该节点处。
  2. 若不为空,比较当前节点的权值与 X 的大小。
  3. X 小于当前节点的值,进入当前节点的左子树。
  4. X 大于当前节点的值,进入当前节点的右子树。
  5. 重复 1,2,3,4 步。
#include<bits/stdc++.h>
using namespace std;int tree[1010], pos[1010];
void dfs(int &root, int x) {if(tree[root] == -1){tree[root] = x;return ;}if (x < tree[root]){root *= 2;;dfs(root, x);} else if (x > tree[root]){root *= 2;root++;dfs(root, x);}
}
int main() {int n;cin >> n;memset(tree, -1, sizeof(tree));for (int i = 1; i <= n; i++) {int x;cin >> x;pos[i] = 1;dfs(pos[i], x);}for (int i = 1; i <= n; i++) {cout << tree[pos[i]] << ' ' << tree[pos[i] * 2] << ' ' << tree[pos[i] * 2 + 1] << endl;}return 0;
}

  

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

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

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日派对座位安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

如何为Easybr指纹浏览器配置高效代理IP?IPXProxy步骤指南

​Easybr是一款简单易上手的指纹浏览器&#xff0c;它的操作简便、灵活&#xff0c;比较适合跨境电商卖家日常工作中使用。在运营跨境店铺的时候&#xff0c;我们有时会面临网络连接不畅的情况&#xff0c;这会导致没法及时回复客户的消息&#xff0c;而影响店铺的销售。而为了…

5 C 语言数组与字符串的全面解析

目录 1 数组的概念与特性 1.1 什么是数组 1.2 数组的特点 1.3 数组的用途 2 一维数组的定义与初始化 2.1 一维数组的定义 2.2 声明与定义的区别 2.3 一维数组的多种初始化 3 数组名的命名规则与作用 3.1 数组名的命名规则 3.2 数组名的作用 4 一维数组在内存中的存…

C语言:键盘录入案例

主要使用了scanf&#xff1b; scanf的使用方法和注意事项&#xff1a; 1.作用&#xff1a; 用于接收键盘输入的数据并赋值给对应的变量 2.使用方式; scanf("占位符",&变量名); 3.注意事项; 占位符后面的的变量要对应 第一个参数中不写换行 案例1&#xf…

FeignErrorDecoder使用笔记

自定义ErrorDecoderSlf4j public class FeignErrorDecoder implements ErrorDecoder {Overridepublic Exception decode(String methodKey, Response response) {String message response.reason();try {if (response.body() ! null) {message IOUtils.toString(response.bod…

Codeforces 916 div3 A-F

A 题意分析&#xff1a; 看思考每个题的时间是否大于等于解决该题需要的时间&#xff0c;如果是&#xff0c;则能解决该题&#xff0c;否则不能&#xff0c;直接枚举计数即可 C代码&#xff1a; #include<iostream> using namespace std; int main(){int t,n;cin>&g…

history,hash缓存那些事

vue-router 中的 createWebHistory&#xff0c;createWebHashHistory两种模式 createWebHistory 是基于 window.history 对象是HTML5提供的用于维护当前标签页浏览历史的对象&#xff0c;主要功能是前进后退和在不刷新页面的情况下&#xff0c;修改地址栏里的URL地址。histor…

TCP/IP八连问

目录 1. 基础概念2. 网络层&#xff08;IP协议&#xff09;3. 传输层&#xff08;TCP和UDP&#xff09;4. 应用层5. 网络安全6. 网络故障诊断7. 高级主题8. 问题解决能力 1. 基础概念 问题: 请解释TCP/IP协议是什么&#xff1f; 答案: TCP/IP协议是互联网通信的基础协议&#x…

“微软蓝屏”事件:网络安全问题的深刻暴露

“微软蓝屏”事件&#xff1a;网络安全问题的深刻暴露 前言 在2024年7月19日&#xff0c;全球范围内发生了一起由微软视窗&#xff08;Windows&#xff09;操作系统引发的蓝屏死机&#xff08;Blue Screen of Death, BSOD&#xff09;事件。此次事件不仅影响了数百万台Window…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-04-信息系统架构设计方法-信息化总体架构方法

文章目录 1. 信息化概述1.1 信息化1.2 国家信息化1.3 信息化的内涵1.4 品牌信息化建设1.5 信息化特征1.5.1 易用性1.5.2 健壮性1.5.3 平台化、灵活性、拓展性1.5.4 安全性1.5.5 门户化、整合性1.5.6 移动性 2. 信息化工程建设方法2.1 信息化架构模式2.1.1 数据导向架构2.1.2 流…

Pandas包与Numpy包区别

文章目录 一、设计目的与核心功能二、数据结构三、性能与灵活性四、应用场景 Pandas包与Numpy包在数据处理和分析方面各有特点和优势&#xff0c;它们之间的主要区别可以归纳如下&#xff1a; 一、设计目的与核心功能 Numpy&#xff1a; 设计目的&#xff1a;Numpy是Python的一…

Policy-GNN

Policy-GNN代码解析 一、dqn_agent_pytorch.py二、train_citeseer.py三、train_cora.py四、gcn.py 一、dqn_agent_pytorch.py 这个文件实现了一个基于深度Q学习的智能体DQNAgent。代码使用PyTorch来定义和训练深度神经网络&#xff0c;估计状态-动作值。 主要组成部分包括&am…

TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO

本教程将完成一个全面的UDP运行流程与GPSDO测试&#xff0c;从下载项目的源代码开始&#xff0c;通过编译过程&#xff0c;最终将项目部署到目标板卡上运行演示。此外&#xff0c;我们还介绍如何修改板卡的IP地址&#xff0c;以便更好地适应您的网络环境或项目需求。 首先从Gi…

Unity UGUI 之 ScrollBar与ScrollView

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.什么是ScrollBar 滚动块&#xff1a;Unity - Manual: Scrollbar 2.重要参数 该笔记来源…

java用freemarker导出word

freemarker导出word 第一步、将word转换为xml格式第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下&#xff08;可以自己新建一个文件夹放在文件夹中&#xff09;第三步、格式化xml代码&#xff08;如果问价太大可能会无法格式化&#xff09;这时候需要在…

微软CrowdStrike驱动蓝屏以及内核签名

原因 当Windows操作系统遇到严重错误导致系统崩溃时&#xff0c;屏幕显示为蓝色&#xff0c;通常伴有错误代码和信息&#xff0c;这被称为“蓝屏死机”&#xff08;Blue Screen of Death&#xff0c;简称BSOD&#xff09; https://www.thepaper.cn/newsDetail_forward_281262…

Unity中UI系统3——UGUI

概述 基础知识 UGUI基础 六大基础组件 Canvas——渲染模式控制组件 Canvas Scaler —— 分辨率自适应组件 CanvasScaler——恒定像素模式 CanvasScaler——缩放模式 可以适当的自己去了解对数 CanvasScaler——恒定物理模式 CanvasScaler —— 3D模式 Graphic Raycaster——射线…

RabbitMQ的学习和模拟实现|muduo库的介绍和使用

muduo库 项目仓库&#xff1a;https://github.com/ffengc/HareMQ muduo库 muduo库是什么快速上手搭建服务端快速上手搭建客户端上面搭建的服务端-客户端通信还有什么问题?muduo库中的protobuf基于muduo库中的protobuf协议实现一个服务器 muduo库是什么 Muduo由陈硕大佬开…

人工智能与机器学习原理精解【3】

文章目录 泰勒级数逼近基础一阶导数和二阶导数的几何意义一阶导数的几何意义二阶导数的几何意义应用示例 导数与微分的区别1. 定义与本质2. 几何意义3. 表达式与关系4. 应用场景 可微函数定义几何意义性质例子 导数导数的定义导数的计算导数的几何意义导数函数的图像一、常见导…

在Ubuntu上部署Zerotier IPV6网络

今天我们将在阿贝云提供的免费服务器上,部署并优化一个Zerotier网络,支持IPV6。阿贝云确实提供了不错的免费云服务器,1核CPU、1G内存、10G硬盘、5M带宽,完全可以满足我们的部署需求。接下来让我们一起看看如何在Ubuntu上安装和配置Zerotier吧。 Zerotier是一个非常出色的虚拟网…