二叉树的后序遍历的非递归实现算法
算法思想:
后序遍历二叉树的顺序是左右根。我们需要用一个辅助栈来记录没有访问过得祖宗节点。借助一个简单的二叉树模拟一下过程。
后序遍历的顺序是DEBFGCA
算法步骤
1.沿着根的左孩子,依次入栈,直到左孩子为空。此时栈内的元素依次是ABD
2.读取栈顶元素,若其右孩子不为空且从来没有被访问过,将右子树执行步骤1,否则弹出栈顶元素并访问。
栈顶D的右孩子为空,出栈并访问,此时栈顶元素为B,有右孩子且未被访问过,将E入栈,E没有右孩子,访问并出栈,此时B的右孩子已经被访问过了,访问B并出栈,此时的栈顶元素A不空且没有被访问过,CF入栈,F的右孩子为空,访问并出栈,C的右孩子不为空,G入栈,G没有右孩子,访问G并出栈,此时C的右孩子已经被访问,访问C并出栈。最后访问A节点,栈为空,结束遍历。
伪代码
void postOrder(BiTree T){InitStack(S);p=T;r=NULL;while(p||!isEmpty(S)){if(p){push(S,p);p=p->left;}else{GetTop(S,p);if(p->right&&p->right!=r){p=p->right;}else{pop(S,p);visit(p->data);r=p;p=NULL;}}}
}
二叉树的后序遍历的非递归实现算法相关推荐
- LeetCode 145 二叉树的后序遍历(非递归)
题目: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路: 1.使用一 ...
- 二叉树前序、中序和后序遍历的非递归实现
1 二叉树的遍历 1.1 前序遍历 对于每棵子树,先处理根,然后处理左子树,最后处理右子树.根最先访问,所以是前序遍历. 1.2 中序遍历 对于每棵子树,先处理左子树,然后处理根,最后处理右子树.根中 ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)
五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...
- 后序遍历(非递归)☆
试写出非递归的后序遍历算法 分析: 非递归的后续遍历较中序和先序而言,稍微复杂一点,首先我们需要一直从根节点往下寻找左孩子并入栈,之后访问栈顶元素, 并判断是否 ...
- 二叉树的先序遍历(非递归)
虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式 所以这里通过栈,用非递归方法实现二叉树的先序遍历 二叉树的存储结构定义: typedef struct node{int dat ...
- 二叉树的先序遍历和非递归遍历
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon May 13 15:48:30 201 ...
- 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例
一.题目要求 给定一个 n 叉树的根节点 root ,返回其节点值的后序遍历. n 叉树在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔. 示例 1: 输入:root = [1,nu ...
最新文章
- 图解粒子群优化算法(PSO)
- 年轻,误把unix当linux
- BGP边界网关协议线路优势
- 【加密U盾】在LINX操作系统中部署KD电子钥匙
- js+正文规则 高亮搜索关键字(二)
- 班级日常分享,一天一瞬间
- VScode 环境 配置
- php标签class,dede模板标签以及dedetag.class.php模板类使用方法
- 基于PlayTennis数据集的决策树决策分析
- 服务器lsass系统错误,Win7系统提示Lsass.exe系统错误的原因及解决
- 初识马尔科夫链,原来是这样的
- 小说APP源码—小说app开发如何做到小说APP系统快速搭建?
- 第5章 初识SqlSugarCore之内置逻辑分页
- vue后端模板、vue登录界面、注册界面(带短信验证码)模板
- CJT长江连接器公司的A2541系列线对板连接器PCB封装库
- 微信小程序中实现吸顶效果(流畅、不卡顿)
- TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建
- 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)
- 区块链——颠覆式创新技术
- 2021年全球医用气体压力调节器收入大约180.9百万美元,预计2028年达到226.3百万美元