算法思想:后序非递归遍历二叉树是先访问左子树,再访问右子树,最后访问根节点。 ①若根节点有左孩子,则左孩子以此入栈,直到左孩子为空,然后读取栈顶元素,若其右孩子不为空且未被访问过,则对右子树执行①。否则栈顶元素出栈并访问。

例:


对上图进行后序遍历。

代码:

#include <bits/stdc++.h>
using namespace std;typedef struct TreeNode{char data;struct TreeNode *lchild,*rchild;int tag;
}TreeNode ,*Tree;// 递归构造二叉树
void createTree(Tree &t){char ch;ch = getchar();if (ch=='#') t=NULL;else{t = (TreeNode *)malloc(sizeof(TreeNode));t->data = ch;t->tag = 0;t->lchild =NULL;t->rchild = NULL;createTree(t->lchild);createTree(t->rchild);}
}void back(Tree t){struct TreeNode *stack[30];int top = -1;TreeNode *p = t;TreeNode *x;
//若p存在或者栈不为空则可继续进行while(p||top!=-1){//若p存在则入栈并将p指向左孩子结点if(p){top++;stack[top]=p;p=p->lchild;}//p不存在,则将p指向栈顶元素。else{p=stack[top];
//判断是否有右孩子并且有没有被访问。if(p->rchild&&p->rchild->tag == 0){p=p->rchild;}else{p=stack[top];top--;cout<<p->data<<" ";p->tag = 1;p=NULL;}}}
}int main(){Tree t;createTree(t);back(t);return 0;
}
// ABD##E##C##

树与二叉树——后序遍历二叉树的非递归算法相关推荐

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

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

  2. 数据结构二叉树中序遍历递归和非递归算法

    2022.11.19 二叉树中序遍历递归和非递归算法 任务描述 相关知识 编程要求 测试说明 C/C++代码 任务描述 本关任务:给定一棵二叉树,使用递归和非递归的方法实现二叉树的中序遍历结果. 相关 ...

  3. 二叉树先序遍历、中序遍历、后序遍历 递归和非递归算法

    一.二叉树先序遍历 (1)递归算法 // 递归先序遍历 public static void recursionPreorderTraversal(TreeNode root) {if (root ! ...

  4. 二叉树的后序遍历-递归和非递归算法

    同样的,创建的算法在先序中有,略去. 后序递归遍历算法 void PostOrder(BiTree bt){if(bt){PostOrder(bt->lchild);PostOrder(bt-& ...

  5. 二叉树后序遍历-递归与非递归(左右根)

    递归版本: public static void reverseIn(Node head){if (head == null)return;reverseIn(head.left);reverseIn ...

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

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

  7. 002 前、中、后序遍历二叉树(递归迭代)

    1.递归法 ① 前序遍历二叉树 ② 中序遍历二叉树 ③ 后序遍历二叉树 2.迭代法 ① 前序遍历二叉树 ② 中序遍历二叉树 ③ 后序遍历二叉树 类似前序遍历,先"中→右→左"遍历二 ...

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

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

  9. 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度

    文章目录 前言 创建二叉树 先序遍历 中序遍历 后序遍历 获取叶子节点个数 获取树的高度 测试代码 前言 现有如下二叉树: 关于二叉树的相关操作,我们能够发现二叉树从根节点到子节点,以及每个中间节点基 ...

最新文章

  1. [开心]很搞笑的贴图,必看(收藏)
  2. 第七章 前端开发——前端工程化(NPM、脚手架、前端环境搭建)
  3. 一个客户端刷新的例子
  4. angular依赖注入_Angular依赖注入简介
  5. 七步从Angular.JS菜鸟到专家(2):Scopes
  6. ‘module‘ object has no attribute ‘computation‘
  7. mybatis和mybatis-plus存读数据库中的对象(对象转json与json转对象)
  8. 网络爬虫-抓取酷航机票信息
  9. css实现两端对齐的方法(先借鉴别人的,后期再加入自己的理解)
  10. 计算机应用基础2020答案形考,国开2020秋季答案《计算机应用基础(本)》形考学习过程表现...
  11. Linux通过windows代理上网并安装软件
  12. Python练习---turtle绘图之绘制天安门
  13. python监听多个udp端口_尝试实现非阻塞python-udp多端口获取wierd异常
  14. android tv keep,Keep电视版
  15. 2020年度英国商业大奖获奖名单公布
  16. QUARTZ 简单介绍
  17. Springboot 设置post参数大小: 解决报错The multi-part request contained parameter data (excluding uploaded files
  18. 世界各国新娘幸福瞬间
  19. helm create configmap error: ConfigMap in version “v1“ cannot be handled as a ConfigMap
  20. 怎么计算子网能容纳的IP数量,如何看网络标识?

热门文章

  1. caj在线转换成pdf的方法步骤这里有!
  2. 厌倦了各种app推送广告?用RSS来订阅自己想看的内容吧
  3. 数据分析师,年终述职报告模板来了!
  4. 全球及中国硫酸铵行业研究及十四五规划分析报告
  5. 《越狱》第二季过后,剧情跌宕起伏,各角色们的命运也各有不同,现公布如下
  6. 如何将wrf文件转换成wmv格式
  7. wordpress模板安装- wordpress中文主题插件如何安装
  8. wordpress php 中文分词 开源,WordPress中文分词与智能搜索
  9. springboot使用p6spy打印完整SQL
  10. 有哪些编程后找错误的心得?