二叉树的遍历(非递归方式)
void PreOrder(BinTree bt) {stack<BinTree> astack;BinTreeNode * p;astack.push(bt);while(!astack.empty()){p=astack.top();astack.pop();cout<<p->data<<" ";if(p->rightchild!=NULL){astack.push(p->rightchild);}if(p->leftchild!=NULL){astack.push(p->leftchild);}} }
void InOrder(BinTree bt) {stack<BinTree> astack;BinTree p;p=bt;if(p==NULL){return;}astack.push(bt);p=p->leftchild;while(p||!astack.empty()){while(p!=NULL)//沿着左支深入直至NULL {astack.push(p);p=p->leftchild;}p=astack.top();//逐个弹出,访问 astack.pop();cout<<p->data<<" "; p=p->rightchild;//进入右支,下次的大循环,就在右支中向左深入 } }
void PostOrder(BinTree bt) {BinTree p=bt;stack<BinTree> astack;if(bt==NULL){return ;}while(p!=NULL||!astack.empty()){while(p!=NULL){astack.push(p);p=p->leftchild?p->leftchild:p->rightchild;//如果左孩子非空,移向左孩子,否则移向右孩子 }//此处已到达最底层 p=astack.top();astack.pop();cout<<p->data<<" ";if(!astack.empty()&&(astack.top()->leftchild==p))//如果栈非空,并且刚刚访问的节点是左孩子 {p=astack.top()->rightchild;//移向右孩子,下次大循环就开始寻找这个节点最底层 }else//如果是右孩子,说明左孩子在上次就被处理 {p=NULL;//p赋为空,这样下次大循环中的第一个循环被掠过,相当于返回了上一层 }} }
转载于:https://www.cnblogs.com/single-dont/p/11545226.html
二叉树的遍历(非递归方式)相关推荐
- 二叉树后续遍历非递归
二叉树的后序非递归遍历就比较难写,因为涉及到判断节点的访问状态- 现在有个很巧妙的方法: 前序:根->左->右 后序:左->右->根 那么可以把后序当作:根->右-> ...
- 二叉树 —— 创建二叉树 先序遍历 、中序遍历、后序遍历(递归方式、非递归方式)
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef char DataType; #de ...
- 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)
分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...
- 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)
1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...
- 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)
本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...
- golang二叉树的递归和非递归方式的前中后序遍历
二叉树的递归和非递归方式中序遍历 方法一:递归 思路与算法 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树--根节点--右子树的方式遍历这棵树() (前序和后序遍历方式一样,就是打印root节 ...
- 对于二叉树三种非递归遍历方式的理解
利用栈实现二叉树的先序,中序,后序遍历的非递归操作 栈是一种先进后出的数据结构,其本质应是记录作用,支撑回溯(即按原路线返回):因此,基于其的二叉树遍历操作深刻的体现了其特性: 若后续的输入和其前面的 ...
- 二叉树的遍历 (递归和非递归实现)
二叉树的遍历 (递归实现) 用C++实现二叉树的"先根遍历"存储. 用C++实现二叉树的"先根遍历"."中根遍历"."后根遍历&q ...
- 线索二叉树中序非递归线索化以及递归线索化构建和遍历算法
引文 大部分教材给出了 线索二叉树的中序递归线索化以及中序遍历,但是没给出非递归,现在网上大部分非递归算法代码各种条件判断写的比较离谱,所以干脆自己总结了一个清晰的.线索二叉树中序非递归线索化以及递归 ...
- 二叉树的遍历(递归与非递归实现)
二叉树的遍历(递归与非递归实现) 二叉树的实现(三叉链表的形式) public class XieChaoThreeLinkBinTree<E> {public static class ...
最新文章
- 2022-2028年中国机制砂石行业投资分析及前景预测报告
- 皮一皮:直男最后的倔强...
- python可以做什么开发-Python能做什么,能够开发什么项目?
- Dockerfile构建PHP镜像
- 如何计算近似纳什均衡_明明合作可以“共赢”,为什么他会损人不利己?博弈论之纳什均衡...
- boost::mpl模块实现sort相关的测试程序
- OpenShift 4 之Istio-Tutorial (11) 控制Egress访问
- MD4哈希算法原理及实现(附源码)
- android输入法ios下载安装,仿ios输入法
- Java进阶诀窍httpwww.china-pub.com44147
- 谈谈网络通信中的 ACK、NACK 和 REX
- 为什么大多数人永远不会真正成功?
- 百度地图的一些踩坑 marker网络图片不显示
- 2022-2027年中国酸性蛋白酶行业发展前景及投资战略咨询报告
- Windows 10 IDM 下载play.kth.se上面的网课视频
- 康奈尔本科学计算机要什么条件,康奈尔大学计算机专业申请条件详细解读
- 【硬盘】2021-西部数据叠瓦盘(SMR)、垂直盘(CMR/PMR)型号、容量大全
- 小米电视不同清晰度图片对比效果
- 用Vue+Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)
- Python读书笔记第五章:运算符与表达式
热门文章
- php判断当前时间是否跨月,判断日期是否能跨月查询的js代码_javascript技巧
- java打星星_java实现星星图形的输出
- jwt token注销_辩证的眼光搞懂 JWT 这个知识点
- php descryptoserviceprovider,在unity3D上对数据进行DES加密,在PHP服务器上进行解密的详细教程...
- 对某bc站的一次渗透测试
- 阿里云服务器的安装以及使用
- ReactNative(API)Alert
- Android adb.exe程序启动不起来,如何处理
- 第16课:动手实战中文句法依存分析
- Python3中的 Filter的改变