ZT 二叉树先序,中序,后序遍历非递归实现
利用栈实现二叉树的先序,中序,后序遍历的非递归操作
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #include <queue>
- #include <stack>
- #include <iostream>
- using namespace std;
- typedef struct BiTNode{
- char data;
- BiTNode *lchild, *rchild;
- }BiTNode,*BiTree;
- void CreateBiTree(BiTree &T)//建树,按先序顺序输入节点
- {
- char ch;
- scanf("%c",&ch);
- if(ch==' ')
- {
- T=NULL;
- return;
- }
- else
- {
- T=(BiTree)malloc(sizeof(BiTNode));
- if(!T)
- exit(1);
- T->data=ch;
- CreateBiTree(T->lchild);
- CreateBiTree(T->rchild);
- }
- }
- void InOrderTraverse(BiTree T)//非递归中序遍历
- {
- stack<BiTree> Stack;
- if(!T)
- {
- printf("空树!\n");
- return;
- }
- while(T || !Stack.empty())
- {
- while(T)
- {
- Stack.push(T);
- T=T->lchild;
- }
- T=Stack.top();
- Stack.pop();
- printf("%c",T->data);
- T=T->rchild;
- }
- }
- void PreOrderTraverse(BiTree T)//非递归先序遍历
- {
- stack<BiTree> Stack;
- if(!T)
- {
- printf("空树!\n");
- return;
- }
- while(T || !Stack.empty())
- {
- while(T)
- {
- Stack.push(T);
- printf("%c",T->data);
- T=T->lchild;
- }
- T=Stack.top();
- Stack.pop();
- T=T->rchild;
- }
- }
- void PostOrderTraverse(BiTree T)//非递归后序遍历,用一个标记标记右子树是否访问过
- {
- int flag[20];
- stack<BiTree> Stack;
- if(!T)
- {
- printf("空树!\n");
- return;
- }
- while(T)
- {
- Stack.push(T);
- flag[Stack.size()]=0;
- T=T->lchild;
- }
- while(!Stack.empty())
- {
- T=Stack.top();
- while(T->rchild && flag[Stack.size()]==0)
- {
- flag[Stack.size()]=1;
- T=T->rchild;
- while(T)
- {
- Stack.push(T);
- flag[Stack.size()]=0;
- T=T->lchild;
- }
- }
- T=Stack.top();
- printf("%c",T->data);
- Stack.pop();
- }
- }
- void main()
- {
- BiTree T;
- CreateBiTree(T);
- PreOrderTraverse(T);
- printf("\n");
- InOrderTraverse(T);
- printf("\n");
- PostOrderTraverse(T);
- printf("\n");
- }

ZT 二叉树先序,中序,后序遍历非递归实现的更多相关文章
- 分别求二叉树前、中、后序的第k个节点
一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...
- 【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)
本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树.N叉树先序.中序.后序.BFS.DFS遍历的递归和迭代实现.这也是解决树的遍历问题的固定套路. 一.二叉树的先序.中序.后 ...
- 前、中、后序遍历随意两种是否能确定一个二叉树?理由? && 栈和队列的特点和区别
前序和后序不能确定二叉树理由:前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树. 由二叉树的中序和前序遍历序列 ...
- DS Tree 已知先序、中序 => 建树 => 求后序
参考:二叉树--前序和中序得到后序 思路历程: 在最初敲的时候,经常会弄混preorder和midorder的元素位置.大体的思路就是在preorder中找到根节点(根节点在序列的左边),然后在mid ...
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)
Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...
- [Java]算术表达式求值之一(中序表达式转后序表达式方案)
第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...
- 已知树的前序、中序,求后序的java实现&已知树的后序、中序,求前序的java实现
public class Order { int findPosInInOrder(String str,String in,int position){ char c = str.charAt(po ...
- 二叉树前中后/层次遍历的递归与非递归形式(c++)
/* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...
随机推荐
- 尝试用selenium+appium运行一个简单的demo报错:could not get xcode version. /Library/Developer/Info.plist doest not exist on disk
业余时间抽空搭了个appium+selenium的环境(mac), 在执行第一个脚本的时候遇到个问题纪录下: could not get xcode version. /Library/Develop ...
- 前端神器之Sublime Text2/3简单明了使用总结
为什么叫神器呢? 我总结如下: 第一:也是最重要的,它占内存很小(就如同notepad++那般迅速打开,所以那款其实也不错~).一般IDE比如WebStorm(它也是一款神器来着),Aptana(也比 ...
- Node.js数据流Stream之Duplex流和Transform流
Duplex流一个很好的例子是TCP套接字连接.需要实现_read(size)和_Write(data,encoding,callback)方法. var stream = require('stre ...
- iOS开源项目周报0330
由OpenDigg 出品的iOS开源项目周报第十四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. FengNi ...
- Python操作 Memcache、Redis
Python操作 Memcached.Redis 一.Memcached和Redis对比 1.1 Memcached和Redis的数据类型对比 memcached只有一种数据类型,key对应value ...
- CSS 通过使用Important覆盖所有其他样式
在许多情况下,您将使用CSS库.这些可能会意外覆盖您自己的CSS.所以当你绝对需要确定一个元素具有特定的CSS时,可以使用 !important. 让我们回到之前的 pink-text class 声 ...
- 主打安全 阿里巴巴联合公安部打造PMOS
4月9日,CITE2015(第三届中国电子信息博览会)在深圳会展中心举行,大会主要以“智能新时代.数字新生活”为主题.说道这,就不得不提国内互联网巨头阿里巴巴.大会中阿里巴巴不仅带来了早前马云曾经在德 ...
- 洛谷P3120 [USACO15FEB]牛跳房子(动态开节点线段树)
题意 题目链接 Sol \(f[i][j]\)表示前\(i\)行\(j\)列的贡献,转移的时候枚举从哪里转移而来,复杂度\(O(n^4)\) 然后考虑每一行的贡献,动态开节点线段树维护一下每种颜色的答 ...
- JavaScript 常见面试题
此文内容多为 JavaScript 对数组理解及运用. 1.如何消除一个数组里面重复的元素? var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1]; var newArr ...
- 利用GDAL从内存中直接解析图像数据
对于网络数据源,调度中可以把数据写入本地,然后读取本地数据格式进行影像的解析(地形有时候也用tif等格式). 此种方式会每次调度进行不必要的IO开销和时间花费. GDAL提供了相应的接口,直接从内存中 ...