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;}
};

二叉树非递归后序(后根)遍历相关推荐

  1. 二叉树非递归后序遍历算法(C语言)

    二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...

  2. 二叉树非递归后序遍历算法的一种简单思路

    首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...

  3. 二叉树非递归后序遍历算法

    与正常的非递归中序遍历算法不同于两点: 一  比正常的中序遍历算法多了对数据元素的标记. 在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记, 还有访问完左子树利用gettop()获取双亲通 ...

  4. 二叉树非递归后序遍历

    /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *rig ...

  5. 二叉树非递归后序遍历的三种办法

    方法一: 双栈,利用生成先序序列思路,左--右依次入栈再出栈,得到头--右--左的序列,再将该序列入另一栈再出栈,得到左--右--头序列: void PostOrder_1(Bitree *T) {T ...

  6. 二叉树路径应用举例(基于非递归后序遍历)

    #include "stdafx.h" #include <iostream> #include <fstream>using namespace std; ...

  7. 非递归后序遍历二叉树总结(2种方法)

    算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...

  8. 二叉树非递归先序遍历

    二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...

  9. 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)

    一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...

最新文章

  1. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
  2. Almost Regular Bracket Sequence
  3. mysql5.7.11源码安装_MySQL5.7.10最新版本源代码安装详细过程_MySQL
  4. [转载] 大道至简:软件工程实践者的思想——第十章 是思考还是思想
  5. linux-shell命令之mv(move)【移动或者改名】
  6. PLSQL登录报错ORA-12154
  7. Java中AJAX工作原理是什么
  8. U-Net++粗略解释
  9. ThinkPHP6项目基操(1.环境搭建及ThinkPHP6的安装)
  10. PHP中将首字母大写的函数,在PHP中,使用()函数来将单词首字母转换为大写。
  11. 【Step By Step】将Dotnet Core部署到Docker(中)
  12. CXF入门教程(一)
  13. 问题-Delphi 中使用TStringList后,报out of memory 的解决方法
  14. 怎样才能恢复误删的数据-免费版本
  15. 李清照 —— 别是一家
  16. Linux性能优化之内存优化(二)
  17. Ulipad中设置自定义模块(module)路径的方法(图)
  18. Arduino操作记录---雨滴传感器的使用
  19. SQL Server 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
  20. windows服务创建工具srvany.exe介绍

热门文章

  1. html框架点击左边目录内容显示在右边框架里
  2. 智慧养殖:鸡舍环境监测智慧管理系统
  3. 【图片新闻】五角大楼2020年的预算将购买近380架作战飞机
  4. 5、公司运营 - 开公司创业系列文章
  5. JAVA堆溢出OOM场景模拟及排除过程
  6. 如何快速制作一个简洁美观的在线产品手册
  7. 微信小程序登录流程+介绍wx.login和auth.code2Session
  8. TweenMax的GSAP(GreenSock动画平台)GSAP,专业的Web动画库
  9. centos5 双网卡重启network服务提升IP占用 ping不通
  10. 西门子smart200与台达MS300变频器通讯程序