二叉树非递归后序(后根)遍历
1、要求
使用非递归方式对二叉树进行(后序)后根遍历。
2、思路
使用先序(先根)遍历,然后将遍历的结果反过来。但要注意:无论是先根遍历还是后根遍历,左子树的遍历始终在右子树之前,所以要使先根遍历结果反过来以后和后根遍历相同,在先根遍历时必须先遍历右子树。
3、代码
#include<iostream>
using namespace std;
#include<vector>
#include<stack>struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};class Solution {
private:vector<int> vecVal;
public://递归方式/*vector<int> postorderTraversal(TreeNode *root) {TreeNode *p = root;if (p){postorderTraversal(p->left);postorderTraversal(p->right);if (p->val)vecVal.push_back(p->val);}return vecVal;}*///非递归vector<int> postorderTraversal(TreeNode *root) {vector<int> v;if (!root)return v;stack<TreeNode*> s;s.push(root);TreeNode *temp;while (!s.empty()){temp = s.top();v.push_back(temp->val);s.pop();if (temp->left)s.push(temp->left);if (temp->right)s.push(temp->right);}reverse(v.begin(), v.end());return v;}
};
二叉树非递归后序(后根)遍历相关推荐
- 二叉树非递归后序遍历算法(C语言)
二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...
- 二叉树非递归后序遍历算法的一种简单思路
首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...
- 二叉树非递归后序遍历算法
与正常的非递归中序遍历算法不同于两点: 一 比正常的中序遍历算法多了对数据元素的标记. 在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记, 还有访问完左子树利用gettop()获取双亲通 ...
- 二叉树非递归后序遍历
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *rig ...
- 二叉树非递归后序遍历的三种办法
方法一: 双栈,利用生成先序序列思路,左--右依次入栈再出栈,得到头--右--左的序列,再将该序列入另一栈再出栈,得到左--右--头序列: void PostOrder_1(Bitree *T) {T ...
- 二叉树路径应用举例(基于非递归后序遍历)
#include "stdafx.h" #include <iostream> #include <fstream>using namespace std; ...
- 非递归后序遍历二叉树总结(2种方法)
算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...
- 二叉树非递归先序遍历
二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...
- 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)
一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...
最新文章
- python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
- Almost Regular Bracket Sequence
- mysql5.7.11源码安装_MySQL5.7.10最新版本源代码安装详细过程_MySQL
- [转载] 大道至简:软件工程实践者的思想——第十章 是思考还是思想
- linux-shell命令之mv(move)【移动或者改名】
- PLSQL登录报错ORA-12154
- Java中AJAX工作原理是什么
- U-Net++粗略解释
- ThinkPHP6项目基操(1.环境搭建及ThinkPHP6的安装)
- PHP中将首字母大写的函数,在PHP中,使用()函数来将单词首字母转换为大写。
- 【Step By Step】将Dotnet Core部署到Docker(中)
- CXF入门教程(一)
- 问题-Delphi 中使用TStringList后,报out of memory 的解决方法
- 怎样才能恢复误删的数据-免费版本
- 李清照 —— 别是一家
- Linux性能优化之内存优化(二)
- Ulipad中设置自定义模块(module)路径的方法(图)
- Arduino操作记录---雨滴传感器的使用
- SQL Server 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
- windows服务创建工具srvany.exe介绍