题目描述

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

示例

Input:[1,7,2,6,-1,4,8]
Output:[[], [], []]
输出形式:【【前序遍历】、【中序遍历】、【后序遍历】】

方法一:公式法

利用当前节点与其左节点和右节点的公式即可求解。设a为当前节点下标,则公式如下:
当前节点的左节点的下标:a * 2 + 1
当前节点的右节点的下标:a * 2 + 2

results = [[]for i in range(3)]
class Solution:def binaryTreeScan(self , input ):# write code here# 前序遍历def preOrder(root):if root<len(input):if input[root]!=-1:results[0].append(input[root])preOrder(root*2+1)preOrder(root*2+2)# 中序遍历def inOrder(root):if root<len(input):inOrder(root*2+1)if input[root]!=-1:results[1].append(input[root])inOrder(root*2+2)# 后序遍历def postOrder(root):if root<len(input):postOrder(root*2+1)postOrder(root*2+2)if input[root]!=-1:results[2].append(input[root])preOrder(0)inOrder(0)postOrder(0)return results

方法二:构造二叉树

构造二叉树,然后利用递归分别计算

class Solution {public:
vector<vector<int>> ans;
vector<int> path;struct TreeNode
{TreeNode *left;TreeNode *right;int val;TreeNode(){};TreeNode(int v) : val(v), left(nullptr), right(nullptr){};
};
//前序遍历
void qTravel(TreeNode *root)
{if (root==nullptr)return;path.push_back(root->val);qTravel(root->left);qTravel(root->right);
}
//中序遍历
void zTravel(TreeNode *root)
{if (root==nullptr)return;zTravel(root->left);path.push_back(root->val);zTravel(root->right);
}
//后续遍历
void hTravel(TreeNode *root)
{if (root==nullptr)return;hTravel(root->left);hTravel(root->right);path.push_back(root->val);
}
//数组建立二叉树
void create_tree(TreeNode *&tree, int a[], int len, int index)
{if (index >= len)return;if (a[index] == -1)return;tree = new TreeNode();tree->val = a[index];tree->left = nullptr;tree->right = nullptr;create_tree(tree->left, a, len, 2 * index + 1);create_tree(tree->right, a, len, 2 * index + 2);
}vector<vector<int>> binaryTreeScan(int *input, int inputLen)
{TreeNode *root;create_tree(root, input, inputLen, 0);qTravel(root);ans.push_back(path);path.clear();zTravel(root);ans.push_back(path);path.clear();hTravel(root);ans.push_back(path);path.clear();return ans;
}};

二叉树数组求前中后序遍历相关推荐

  1. python实现二叉树非递归前中后序遍历

    python实现二叉树非递归前中后层序遍历 二叉树是数据结构中重要的一部分,本文简单介绍用python实现二叉树的前中后序遍历,包括递归和非递归思路算法. # -*- 二叉树 begin -*- # ...

  2. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  3. 代码随想录——二叉树(一):前中后序遍历,层序遍历,翻转

    题目来自:https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80. ...

  4. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法

    关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...

  5. 二叉树的层序遍历和前中后序遍历代码 迭代/递归

    二叉树的层序遍历和前中后序遍历代码 迭代/递归 只记录代码.思路参考代码随想录:https://github.com/youngyangyang04/leetcode-master/blob/mast ...

  6. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

  7. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]

    [问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...

  8. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  9. 二叉树非递归dfs——简单思路搞定前中后序遍历

    前言:相信很多同学都被二叉树非递归dfs的前中后序遍历方法弄的头疼.网上的答案,什么前中后序遍历各有一套写法,还有什么一个栈的写法,两个栈的写法.看起来能理解,一闭眼自己写都记不住.今天介绍一种用一种 ...

  10. 数据结构-二叉树(包含二叉树的层次建树、前中后序遍历、层次遍历解析及代码)

    目录 一.树与二叉树的原理解析 1.树的定义 2.树的结构和特点 3.二叉树的定义 4.树结点的数据结构 二.二叉树的层次建树 1.二叉树层次建树的原理及分析 2.完整代码 三.二叉树的前中后序遍历 ...

最新文章

  1. java sharepoint 2010,安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法...
  2. TAdoquery的Filter
  3. 在WebApi中实现Cors访问
  4. Eclipse启动Tomcat时45秒超时的解决方法
  5. EXT--表单AJax提交后台,返回前端数据格式的转换
  6. Rotate List leetcode
  7. c语言实现《学生管理系统》
  8. 教务辅助管理系统mysql_教务管理系统(项目)
  9. 图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
  10. 【哈佛幸福课·健康之道】锻炼的真相
  11. mac开启Airdrop的硬件要求
  12. qt保存文件的默认路径_Qt将文件保存到指定目录下(另存为的功能)
  13. .idea文件在项目中的显示与隐藏
  14. 美摄SDK Alpha产品说明书
  15. 工业物联网 凌顶发布注塑机通讯协议Euromap 63 的 OPCUA 驱动组件
  16. 安装ideaIU-2022.1.4报错问题解决办法
  17. Shell脚本实现多选DNS同时批量解析域名IP地址(新更新)
  18. R语言使用ifelse函数进行变量编码(recode):把dataframe中连续变量基于条件表达式转化为两个类别的离散变量(分类变量)
  19. Java中重载的作用?
  20. Android项目2:新闻+视频聚合App——萌土日报

热门文章

  1. [配套工具] 【新手福音】最简单的大漠插件注册方法 只需四行代码 每行附有详细说明
  2. C语言选择题(含答案)
  3. 川土微电子 | 隔离电源的辐射抑制设计参考(四)
  4. 【数字图像处理】图像复原
  5. mastercam西门子840d后处理_MasterCAM对西门子802D后置处理
  6. 实现H5页面微信分享功能
  7. Docker 安装 zookeeper
  8. 先进的分销管理系统(ADMS)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 【测试】Appium原理
  10. 用Python网络爬虫来抓取网易云音乐歌词