leetcode 145 --- 二叉树后序遍历
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 --- 二叉树后序遍历相关推荐
- 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...
二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...
- sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...
- 数据结构实验之求二叉树后序遍历和层次遍历
数据结构实验之求二叉树后序遍历和层次遍历 Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<100 ...
- c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)
五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...
- 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)
数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入 ...
- 验证二叉树后序遍历序列是否符合要求
验证二叉树后序遍历序列是否符合要求 @(算法学习) 给定一个后续遍历序列,立马知道树根是最后一个序列,那么如何切分左右子树呢? 比树根小的数都在左子树,比根大的都在右子树. 再递归验证,即,对左右子树 ...
- Java 二叉树后序遍历(递归/非递归)
Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...
- (数据结构)二叉树后序遍历
二叉树后序遍历 二叉树后序遍历的实现思想是: 访问当前节点的左子树 访问当前节点的右子树 访问根节点 图 1 二叉树 以上图 1 为例,后序遍历的过程如下: 从根节点 1 开始,遍历该节点的左子树(以 ...
- 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是
已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...
最新文章
- 得分碾压人类的NLP系统诞生了,微软创CoQA挑战新纪录!
- 任意用户密码重置(四):重置凭证未校验
- 国际计算机杂志排名2015,中国计算机学会推荐国际学术刊物与期刊(新增列表)2015-12-22-06_48_31...
- C/C++学习之路: 继承
- 单机上多git平台多账户配置
- SQL Server 固定角色
- Python实例:11~20例
- yolov3模型识别不出训练图片_【AI论技】YOLOv3在标的物资产实时管理中的应用
- 基于Wiremock创建Mock Service平台
- 万能DLL1.3发布 ——您的编程好帮手
- ESP分区引导文件修复bcdboot .exe
- 图解三层交换机:局域网都用它来组网
- CSS 图像居中对齐
- KB,MB单位转换(Vue)
- 在m1/m2芯片的mac电脑上运行Stable Diffusion的全步骤
- 令人头秃的集训第三周学习记录(练习题+感悟)
- 用事实说话,我们的数据库应选择RAID几?
- 机器学习教程 三.回归理论及代码实现
- DOSBox debug中查看标志位
- 树上的BFS(Tree Breadth First Search)
热门文章
- python 通过ip获取城市_python 根据ip获取地理位置
- linux mysql插入数据乱码_解决Linux下Tomcat向MySQL插入数据中文乱码问题
- python 类初始化参数校验_如何规避python参数的初始化次数?
- HALCON标定板制作、标准文件输出方法、算子讲解
- 【每日SQL打卡】DAY 1丨部门工资最高的员工【难度中等】
- android studio云测,Android studio 下的robotium自动化测试和持续集成
- idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
- 收到计算机工程与应用的退修通知,《计算机工程与应用》退修意见
- STM32学习及开发笔记八:采用主从计时器实现精确脉冲输出
- mysql索引(b+tree)小记