1 题目

用递归的方法对给定的二叉树进行后序遍历。

例如:

给定的二叉树为{1,#,2,3},

返回[3,2,1].

示例1

输入

{1,#,2,3}

输出

[3,2,1]

2 解法

2.1 递归解法

/*** struct TreeNode {*  int val;*   struct TreeNode *left;* struct TreeNode *right;* };*/class Solution {
public:/*** * @param root TreeNode类 * @return int整型vector*/vector<int> postorderTraversal(TreeNode* root) {// write code herevector<int> res;if (root == nullptr)return res;if (root->left != nullptr) {vector<int> left_res = postorderTraversal(root->left);for (int i = 0; i < left_res.size(); i++) {res.push_back(left_res[i]);}}if (root->right != nullptr) {vector<int> right_res = postorderTraversal(root->right);for (int i = 0; i < right_res.size(); i++) {res.push_back(right_res[i]);}}res.push_back(root->val);return res;}
};

性能还可以:

2.2 非递归解法

后续遍历,首先是遍历左节点,然后是右节点,最后是自身,所以可以通过栈的方式,放入自身,然后放右节点,最后是左节点,然后检查栈顶,如果是叶子节点,那么遍历,出栈.如果发现其有左/右子节点,不可以直接把左/右子节点入栈(因为左右子节点遍历过了之后继续入栈会陷入死循环), 要先检查一下,设置一个标记前一个出栈节点的标记指针,如果这个前一个出栈节点不是自己的左右子节点(且不能为空),那么说明他的左右子节点还没有遍历过,那么左右子节点入栈,否则遍历自身且出栈:

/*** struct TreeNode {*  int val;*   struct TreeNode *left;* struct TreeNode *right;* };*/class Solution {
public:/*** * @param root TreeNode类 * @return int整型vector*/vector<int> postorderTraversal(TreeNode* root) {// write code herevector<int> res;if (root != nullptr) {stack<TreeNode*> tS;tS.push(root);TreeNode* pre = nullptr;while(!tS.empty()) {TreeNode* tN = tS.top();if ((tN->left == nullptr && tN->right == nullptr) ||(pre != nullptr && (pre == tN->left || pre == tN->right))) {res.push_back(tN->val);tS.pop();pre = tN;} else {if (tN->right != nullptr)tS.push(tN->right);if (tN->left != nullptr)tS.push(tN->left);}}}return res;}
};

leetcode 145 --- 二叉树后序遍历相关推荐

  1. 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...

    二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...

  2. sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...

  3. 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<100 ...

  4. c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)

    五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...

  5. 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入 ...

  6. 验证二叉树后序遍历序列是否符合要求

    验证二叉树后序遍历序列是否符合要求 @(算法学习) 给定一个后续遍历序列,立马知道树根是最后一个序列,那么如何切分左右子树呢? 比树根小的数都在左子树,比根大的都在右子树. 再递归验证,即,对左右子树 ...

  7. Java 二叉树后序遍历(递归/非递归)

    Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...

  8. (数据结构)二叉树后序遍历

    二叉树后序遍历 二叉树后序遍历的实现思想是: 访问当前节点的左子树 访问当前节点的右子树 访问根节点 图 1 二叉树 以上图 1 为例,后序遍历的过程如下: 从根节点 1 开始,遍历该节点的左子树(以 ...

  9. 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是

    已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...

最新文章

  1. 得分碾压人类的NLP系统诞生了,微软创CoQA挑战新纪录!
  2. 任意用户密码重置(四):重置凭证未校验
  3. 国际计算机杂志排名2015,中国计算机学会推荐国际学术刊物与期刊(新增列表)2015-12-22-06_48_31...
  4. C/C++学习之路: 继承
  5. 单机上多git平台多账户配置
  6. SQL Server 固定角色
  7. Python实例:11~20例
  8. yolov3模型识别不出训练图片_【AI论技】YOLOv3在标的物资产实时管理中的应用
  9. 基于Wiremock创建Mock Service平台
  10. 万能DLL1.3发布 ——您的编程好帮手
  11. ESP分区引导文件修复bcdboot .exe
  12. 图解三层交换机:局域网都用它来组网
  13. CSS 图像居中对齐
  14. KB,MB单位转换(Vue)
  15. 在m1/m2芯片的mac电脑上运行Stable Diffusion的全步骤
  16. 令人头秃的集训第三周学习记录(练习题+感悟)
  17. 用事实说话,我们的数据库应选择RAID几?
  18. 机器学习教程 三.回归理论及代码实现
  19. DOSBox debug中查看标志位
  20. 树上的BFS(Tree Breadth First Search)

热门文章

  1. python 通过ip获取城市_python 根据ip获取地理位置
  2. linux mysql插入数据乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
  3. python 类初始化参数校验_如何规避python参数的初始化次数?
  4. HALCON标定板制作、标准文件输出方法、算子讲解
  5. 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
  6. android studio云测,Android studio 下的robotium自动化测试和持续集成
  7. idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
  8. 收到计算机工程与应用的退修通知,《计算机工程与应用》退修意见
  9. STM32学习及开发笔记八:采用主从计时器实现精确脉冲输出
  10. mysql索引(b+tree)小记