news 2026/4/16 19:27:14

先序遍历、中序遍历和后序遍历【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
先序遍历、中序遍历和后序遍历【牛客tracker 每日一题】

先序遍历、中序遍历和后序遍历

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

给定一棵包含n nn个节点的二叉树,节点编号为1 ∼ n 1∼n1n,以n − 1 n−1n1有向边( a i , b i ) (a_i,b_i)(ai,bi)形式给出,表示父节点a i a_iai指向子节点b i b_ibi

对子节点的左右关系作如下规定:

请输出该二叉树的先序中序后序遍历序列。

输入描述:

第一行输入整数n ( 1 ≦ n ≦ 10 5 ) n(1≦n≦10^5)n(1n105)
接下来n − 1 n−1n1行,每行输入两个整数a i , b i ( 1 ≦ a i , b i ≦ n ) a_i,b_i(1≦a_i,b_i≦n)ai,bi(1ai,bin),表示一条有向边a i → b i a_i→b_iaibi

输出描述:

第一行输出先序遍历序列;
第二行输出中序遍历序列;
第三行输出后序遍历序列。各行序列中的数字以单个空格分隔。

示例1

输入:

2 1 2

输出:

1 2 2 1 2 1

解题思路

首先构建二叉树结构,用数组t tt存储每个节点的左右孩子,遍历输入的n − 1 n-1n1条有向边,标记子节点v [ b ] = t r u e v[b]=truev[b]=true,按规则确定左右孩子(父节点单孩子时,子节点编号大于父节点则为左孩子,否则为右孩子;双孩子时编号较小者为左孩子);随后找到未被标记的根节点(无父节点);接着通过递归分别实现先序(根→左→右)、中序(左→根→右)、后序(左→右→根)遍历,依次输出对应序列;该方法通过数组高效存储节点的左右孩子,递归遍历适配n nn1 e 5 1e51e5的规模,先完成树的构建再按遍历规则输出,精准得到三种遍历序列,满足题目对左右孩子的定义和遍历顺序的要求。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefpair<ll,ll>pii;constll p=1e9+7;constll N=1e5+10;ll t[N][2];boolv[N];voidpro(ll root){cout<<root<<" ";if(t[root][0])pro(t[root][0]);if(t[root][1])pro(t[root][1]);}voidin(ll root){if(t[root][0])in(t[root][0]);cout<<root<<" ";if(t[root][1])in(t[root][1]);}voidpost(ll root){if(t[root][0])post(t[root][0]);if(t[root][1])post(t[root][1]);cout<<root<<" ";}intmain(){ll n;cin>>n;for(ll i=1;i<n;++i){ll a,b;cin>>a>>b;v[b]=true;if(t[a][0]==0&&t[a][1]==0){if(a<b)t[a][0]=b;elset[a][1]=b;}else{if(t[a][0]){if(t[a][0]<b)t[a][1]=b;else{t[a][1]=t[a][0];t[a][0]=b;}}elseif(t[a][1]){if(t[a][1]>b)t[a][0]=b;else{t[a][0]=t[a][1];t[a][1]=b;}}}}ll root=1;for(root=1;root<=n;++root){if(!v[root])break;}pro(root);cout<<endl;in(root);cout<<endl;post(root);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:07:27

如何设计一个简单的 `ORM` 框架?

从零开始设计一个简单的 ORM 框架:原理、实现与实践指南 (图1:ORM框架核心架构示意图) 目录 引言:ORM的前世今生与核心价值 ORM核心概念与基础理论 从零构建简易ORM:架构设计与核心组件 核心实现:元编程与数据库交互 查询构建器:将对象操作转化为SQL 关系映射:处理对…

作者头像 李华
网站建设 2026/4/15 20:18:47

导师严选9个AI论文网站,专科生轻松搞定毕业论文格式规范!

导师严选9个AI论文网站&#xff0c;专科生轻松搞定毕业论文格式规范&#xff01; AI 工具的崛起&#xff0c;让论文写作不再难 对于专科生来说&#xff0c;毕业论文不仅是一道必过的门槛&#xff0c;更是一次对学术能力的全面考验。然而&#xff0c;面对格式规范、内容逻辑、语…

作者头像 李华
网站建设 2026/4/16 14:28:31

A.每日一题——1970. 你能穿过矩阵的最后一天

题目链接&#xff1a;1970. 你能穿过矩阵的最后一天&#xff08;困难&#xff09; 算法原理&#xff1a; 解法&#xff1a;深搜DFS 方法一&#xff1a;反向dfs 13ms击败94.50% 时间复杂度O(mn) ①初始时网格全是水&#xff0c;从最后一天往回推&#xff0c;每天把一个水单元格变…

作者头像 李华
网站建设 2026/4/16 14:26:21

Jenkins流水线配置的两种方式

在Jenkins的项目配置里面&#xff0c;如果创建的是流水线项目。在流水线配置的地方&#xff0c;有两种方式&#xff0c;如下图所示&#xff1a;方式一&#xff1a;pipiline script&#xff0c;直接在配置页面上写流水线脚本。方式二&#xff1a;pipeline script from SCM&#…

作者头像 李华
网站建设 2026/4/16 10:59:32

深度解析 CherryECAT:国产 EtherCAT 协议栈与国外主流方案的全方位对比及项目实战(上)

目录 工业以太网的 “顶流”:EtherCAT 协议基础认知 EtherCAT 核心原理与关键算法(新手也能懂) CherryECAT 与国外协议栈基础信息全景对比 核心技术原理与算法深度拆解 功能特性全方位对比 性能指标实测对比(含测试代码与数据) 代码实战:不同协议栈开发完整示例 应用场景…

作者头像 李华