对给定数组所对应的二叉树依次完成前序,中序,后序遍历,并输出遍历结果。

本文主要是介绍对给定数组所对应的二叉树依次完成前序,中序,后序遍历,并输出遍历结果。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对给定数组所对应的二叉树依次完成前序,中序,后序遍历,并输出遍历结果。每行输入为一个二叉树,一维数组形式。其中-1表示Nil节点,例如:1,7,2,6,-1,4,8 构成的二叉树如下图所示:

在这里插入图片描述
结果以二维数组形式输出(前序,中序,后序遍历的结果),其中Nil节点不用输出。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M

示例1
输入例子:
[1,7,2,6,-1,4,8]
输出例子:
[[1,7,6,2,4,8],[6,7,1,4,2,8],[6,7,4,8,2,1]]

例子说明:
注意二维数组中的结果依次为:前序,中序,后序遍历的结果,Nil(-1)节点不用输出。

算法步骤:

  • 首先,使用队列的方式创建二叉树;
  • 其次,对二叉树进行先序、中序、后序遍历,并保存值;
  • 最终,输出遍历结果;

#include <queue>
class Solution {public:/*** 对给定的二叉树依次完成前序,中序,后序遍历,并输出遍历结果* @param input int整型一维数组 -1表示Nil节点* @param inputLen int input数组长度* @return int整型vector<vector<>>*/typedef struct BTNode {int val;struct BTNode* lchild;struct BTNode* rchild;} BTNode;void createNode(BTNode*& node, int val) {node = (BTNode*)malloc(sizeof(BTNode));node->val = val;node->lchild = nullptr;node->rchild = nullptr;}void preorderTrval(BTNode* node, vector<int>& rs) {if (node != nullptr) {if (node->val != -1) {rs.push_back(node->val);}preorderTrval(node->lchild, rs);preorderTrval(node->rchild, rs);}}void inorderTrval(BTNode* node, vector<int>& rs) {if (node != nullptr) {inorderTrval(node->lchild, rs);if (node->val != -1) {rs.push_back(node->val);}inorderTrval(node->rchild, rs);}}void houorderTrval(BTNode* node, vector<int>& rs) {if (node != nullptr) {houorderTrval(node->lchild, rs);houorderTrval(node->rchild, rs);if (node->val != -1) {rs.push_back(node->val);}}}vector<vector<int>> binaryTreeScan(int* input, int inputLen) {vector<vector<int> > res;queue<BTNode*> qu;if (inputLen == 0) {return res;}BTNode* head;createNode(head, input[0]);qu.push(head);int index = 1;while (!qu.empty()) {BTNode* no = qu.front();if (index < inputLen) {createNode(no->lchild, input[index]);qu.push(no->lchild);}index++;if (index < inputLen) {createNode(no->rchild, input[index]);qu.push(no->rchild);}index++;qu.pop();}vector<int> re1;preorderTrval(head, re1);res.push_back(re1);re1.clear();inorderTrval(head, re1);res.push_back(re1);re1.clear();houorderTrval(head, re1);res.push_back(re1);return res;}
};

删除数组中的重复项

给定一个数组,你需要删除其中重复出现的元素,只保留最后一次出现的重复元素,使得每个元素只出现一次,返回新数组,并保证新数组中的元素顺序与原数组一致。

vector<int> removeDuplicate(int* array, int arrayLen) {map<int, int> us;for (int i = 0; i < arrayLen; i++) {us[array[i]] = i;}vector<pair<int, int>> vc;for (auto nums : us) {vc.push_back(pair{ nums.first,nums.second });}sort(vc.begin(), vc.end(), [&](pair<int, int> num1, pair<int, int> num2) {return num1.second < num2.second; });vector<int> res;for (auto vv : vc) {res.emplace_back(vv.first);}return res;}

这篇关于对给定数组所对应的二叉树依次完成前序,中序,后序遍历,并输出遍历结果。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Java遍历HashMap的6种常见方式

《Java遍历HashMap的6种常见方式》这篇文章主要给大家介绍了关于Java遍历HashMap的6种常见方式,方法包括使用keySet()、entrySet()、forEach()、迭代器以及分别... 目录1,使用 keySet() 遍历键,再通过键获取值2,使用 entrySet() 遍历键值对3,

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a