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

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

对给定数组所对应的二叉树依次完成前序,中序,后序遍历,并输出遍历结果。每行输入为一个二叉树,一维数组形式。其中-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

相关文章

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python重命名文件并移动到对应文件夹

《Python重命名文件并移动到对应文件夹》在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求,下面我们就来看看如何使用Python实现重命名文件并移动到对应文件夹吧... 目录检查并删除空文件夹1. 基本需求2. 实现代码解析3. 代码解释4. 代码执行结果5. 总结方法补充在

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::