C++遍历树-非递归递归-使用了标记位
//这不是最有效的方法,但使用了标记为容易理解,记下
/* * description:树的遍历示例,非递归版本 * 入栈顺序: * 前序: 右子树 - 左子树 - 当前节点 * 中序: 右子树 - 当前节点 - 左子树 * 后序: 当前节点 - 右子树 - 左子树 * * writeby: nick * date: 2012-10-22 23:56 */ #include <iostream> #include <stack>using namespace std;struct node {int item;bool flag;node *l, *r;node(int n){item=n; l=0; r=0; flag=false;} }; typedef node *link;//前序遍历 void pretraverse(link h, void visit(link)) {stack<link> s;s.push(h);while(!s.empty()){h = s.top();s.pop();visit( h );if (h->r != 0) s.push(h->r);if (h->l != 0) s.push(h->l);} }//中序遍历 void midtraverse(link h, void visit(link)) {stack<link> s;s.push(h);while(!s.empty()){h = s.top();s.pop();if(h->flag == true) {visit(h); continue;}if(h->r != 0 && h->r->flag == false) s.push(h->r);if(h->flag==false){ h->flag=true; s.push(h);}if(h->l != 0 && h->l->flag == false) s.push(h->l);}}//后序遍历 void posttraverse(link h, void visit(link)) {stack<link> s;s.push(h);while(!s.empty()){h = s.top();s.pop();if(h->flag == true) {visit(h); continue;}if(h->flag==false){ h->flag=true; s.push(h);}if(h->r != 0 && h->r->flag == false) s.push(h->r);if(h->l != 0 && h->l->flag == false) s.push(h->l);} }void visit(link p) {cout << p->item << " "; }int main() {link root = new node(4);root->l = new node(5);root->r = new node(6);root->l->l = new node(7);root->l->r = new node(8);cout << "先序遍历:";pretraverse(root, visit);cout << endl << "中序遍历:";midtraverse(root, visit);root->flag = false;root->l->flag = false;root->r->flag = false;root->l->l->flag = false;root->l->r->flag = false;cout << endl << "后序遍历:";posttraverse(root, visit);return 0; }
转载于:https://www.cnblogs.com/wouldguan/archive/2012/10/23/2735511.html
C++遍历树-非递归递归-使用了标记位相关推荐
- 信号放大器数据结构_[11/11]数据结构 二叉树应用(树型信号放大器,file transfer,遍历的非递归实现)...
树型分布网络信号放大器 森林和二叉树的相互转换 并查集 例题:File transfer #include <iostream> using namespace std; //typede ...
- 漫谈二叉树遍历(非递归)
------这篇文章旨在提出一种简单方便,易于理解时空复杂度低且风格统一的二叉树非递归遍历方法. 从二叉树先序遍历开始 二叉树的先序遍历(非递归)相比中后序是最少花哨.最统一的.一般来说先序遍历的代码 ...
- 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)
二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...
- 二叉树先中后序递归遍历与非递归遍历、层次遍历
文章目录 1 先序遍历 1.1 先序遍历递归 1.2 先序遍历非递归 2 中序遍历 2.1 中序遍历递归 2.2 中序遍历非递归 3 后序遍历 3.1 后序遍历递归 3.2 后序遍历非递归 4 层序遍 ...
- c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)
五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...
- 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解
前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...
- 二叉树的遍历(非递归)整理
二叉树的遍历(非递归) 写在前面 二叉树重要,重要,重要.以下代码每日手撸一遍,深刻理解. 二叉树的先序遍历(非递归) 巧记心法 判断是否为空树 1.右侧入栈(访问,q指向右孩子,不空则入栈) 2.p ...
- 树的深度 递归非递归实现
树的深度 递归非递归实现 package com.dugstudio.SwordToOffer;import java.util.LinkedList;/*** 树的深度递归和非递归算法*/ clas ...
- 中序遍历二叉树-非递归方式实现-附C++代码
一.问题描述 给定一个二叉树,要求以非递归的方式进行中序遍历. 原题:二叉树的中序遍历 - leetcode 二.解题思路 首先需要知道一些前置知识:中序遍历是指按 左子树 -> 根节点 -&g ...
最新文章
- AI一分钟 | 传阿里暂停在美扩张云业务;Google发布AI工具以识别儿童性侵犯图片...
- JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)
- php捕获Fatal error错误与异常处理
- Styled Label
- 项目管理理论与实践(1)——企业项目管理介绍
- shell--变量的替换
- 科技公司最爱的 50 款开源工具,你都用过吗?
- C++11 —— 简易的旋转锁类
- 自学python在家怎么上班_【经验分享】转行如何自学Python并且找到工作,分享自己心得...
- Origin2017绘制3D饼状图 去掉指定图例
- 矩阵经典题目六:poj 3070 Fibonacci
- JavaScript 常用单词整理
- centos7 hostnamectl
- Fast DDS Fast DDS主要包括以下内容DDS API、Fast DDS-Gen、RTPS Wire Protocol
- 曙光超级计算机用的芯片是国产吗,真正中国芯片龙头是中科曙光
- R语言排序三个基本函数:sort(),rank(),order()的用法
- 仿购物网站-HTML手写代码(仅提供参考)
- 超文本传输协议 - 白话篇
- AEG 2A 400-280 HFRL1
- 20款华丽的几何形状字体【免费下载】