树的类:

//树的节点
struct Node
{Node(int v = 0) :val(v),left(nullptr),right(nullptr) {};int val;Node *left;Node *right;
};

递归:

//后序遍历----递归
void postorder_recursion(Node *node)
{if (node){if (node->left)postorder_recursion(node->left);if (node->right)postorder_recursion(node->right);cout << node->val << "  ";}
}

非递归,用栈实现:

//后序遍历----循环void postorder_stack(Node* root) {if (!root) return;stack<Node*> postorder_s;Node* current = root;postorder_s.push(current);postorder_s.push(current); // 每个结点 push 两次,这样可以简单的判断出哪些结点是否处理过while (!postorder_s.empty()) {current = postorder_s.top();postorder_s.pop();if (!postorder_s.empty() && current == postorder_s.top()) {   //当处理过了,那么就不会再次进行孩子压栈了if (current->right) {postorder_s.push(current->right);postorder_s.push(current->right);}if (current->left) {postorder_s.push(current->left);postorder_s.push(current->left);}}else {cout<<current->val<< "  ";}}
}

下面是一种很好的思路:

//树的后序遍历   左右中
//因为先序遍历是中左右,如果将左右子树调个存,则就是中右左,然后将其不打印,存入栈中,
//正好是逆序输出,为左右中
void tail_sort(TreeNode<int> *head)
{if (head)  return;stack< TreeNode<int>*>   pri;stack< TreeNode<int>*>  inv_pri;pri.push(head);inv_pri.push(head);while (!pri.empty()){TreeNode<int>* node = pri.top();pri.pop();if (node->right) {pri.push(node->right);inv_pri.push(node->right);}if (node->left) {pri.push(node->left);inv_pri.push(node->left);}}while (!inv_pri.empty()){cout << inv_pri.top()->val << endl;inv_pri.pop();}}

数据结构------后序遍历,不用栈实现和用栈实现相关推荐

  1. 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)

    一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...

  2. 【二叉树的前序、中序、后序遍历的python写法】借助栈的实现,效率媲美递归~

    class TreeNode:def __init__(self,val=0,left=None,right=None):self.val = valself.right = rightself.le ...

  3. “后序遍历二叉运算树进行Lambda演算的化简”带来的联系

    今天闲来无事,想到一个自以为绝妙的想法,那就是用后序遍历二叉树Lambda演算的化简. 数据结构与算法中,我们想写个计算器就必须遇到一个问题,表达式求值!其实表达式很多就是我们所谓的现实生活中的问题解 ...

  4. 二叉树前序、中序和后序遍历的非递归实现

    1 二叉树的遍历 1.1 前序遍历 对于每棵子树,先处理根,然后处理左子树,最后处理右子树.根最先访问,所以是前序遍历. 1.2 中序遍历 对于每棵子树,先处理左子树,然后处理根,最后处理右子树.根中 ...

  5. 二叉树的后序遍历(C语言)

    首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节点开始先遍历其左孩子,①接着同样继续遍历其左孩子的左孩子,直到某个左孩子节点的左孩子 ...

  6. 数据结构 5-3-2 二叉树前序中序后序遍历非递归实现

    一.前言 上一篇整理了几种遍历方式的递归实现,递归的实现方法都很简单,区区几句代码就可以实现,但是如果要用非递归的方法来实现就有些挑战了. 二.中序遍历 从中序遍历开始,其实非递归的方法就是把递归变成 ...

  7. 层序遍历 和 基于栈实现的先\中\后序遍历

    层序遍历 和 基于栈实现的先/中/后序遍历 1 层序遍历 level order traversal 2 基于栈实现的先/中/后序遍历 pre/in/post order traversal 1 层序 ...

  8. 数据结构34:二叉树前序遍历、中序遍历和后序遍历

    链式存储结构存储的二叉树,对树中结点进行逐个遍历时,由于是非线性结构,需要找到一种合适的方式遍历树中的每个结点. 递归思想遍历二叉树 之前讲过,树是由根结点和子树部分构建的,对于每一棵树来说,都可以分 ...

  9. 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历

    数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...

最新文章

  1. 向下钻取按钮位置设置
  2. 观看马云网商大会视频的一些感想.
  3. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath
  4. 压缩机电流保护原因是什么?压缩机烧毁常见原因有哪些?
  5. 历届奥运会中国金牌数
  6. CompletableFuture API用法介绍(二)
  7. C++模板专门化与重载
  8. fanuc机器人码垛编程实例_FANUC 机器人码垛编程详细讲解 记得收藏!
  9. es统计mysql 报表_Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0...
  10. css-font字体和文本样式
  11. git branch 分支管理
  12. MongoDB安装和批量写入
  13. String类基本介绍及常用方法
  14. PYNQ在PS端进行图片缩放
  15. C++大小写字母转换(齐全)
  16. 小技巧(1):Ububtu18.04中.z01 .z02 .z03此类拆分后压缩文件解压缩办法(以及常用解分卷压缩方法)
  17. 【Mskt问题的解决办法】使用御坂翻译器2.x版本遇到的常见问题及解决办法
  18. java hashmap hash算法,jdk1.8 中 HashMap 的 hash 算法和数组寻址
  19. contiki学习笔记之leds
  20. 三国论(6-10章)

热门文章

  1. 碧兴物联IPO过会:拟募资4亿 预计年净利降幅超10%
  2. freemarker标签里面的一些用法
  3. Android studio 制作柏拉图
  4. 最新软件库带社区论坛支持安卓端苹果端,正常测试无报错完整版
  5. 数据湖数据仓库仓湖一体
  6. A2B功放万能板设计思想
  7. 计算机病毒 英语 作文,高中精华双语文章:计算机病毒--“我爱你”
  8. 移动电影院V2.0电影垂直社交,带来社交新体验
  9. ios沙箱软件_iOS沙盒获取
  10. java基于微信小程序的在线考试系统 uniapp 小程序