#include<iostream>
#include<stdlib.h>
#define maxsize 100 using namespace std; typedef struct BTNode{
char val;
BTNode *lchild, *rchild;
}*BiTNode; void CreateTree(BTNode *&root){
char c;
cin >> c;
if(c == '#')
root = NULL;
else{
root = (BTNode *) malloc(sizeof(BTNode));
if(!root){
cerr << "No More Memory!" << endl;
exit(-1);
}
root->val = c;
CreateTree(root->lchild);
CreateTree(root->rchild);
}
} void PreOrderRecursion(BTNode *root){
if(root){
cout << root->val << " ";
PreOrderRecursion(root->lchild);
PreOrderRecursion(root->rchild);
}
} void PreOrderNoRecursion(BTNode *root){
if(!root){
cout << "Root is NULL!" << endl;
return;
}
BTNode* stack[maxsize]; //模拟一个栈
int top = -1; //栈顶指针
stack[++top] = root;
while(top != -1){
BTNode *p = stack[top--];
cout << p->val << " ";
if(p->rchild) //由于左子树先被访问,则右子树应该先入栈
stack[++top] = p->rchild;
if(p->lchild)
stack[++top] = p->lchild;
}
} void InOrderRecursion(BTNode *root){
if(root){
InOrderRecursion(root->lchild);
cout << root->val << " ";
InOrderRecursion(root->rchild);
}
} void InOrderNoRecursion(BTNode *root){
if(!root){
cout << "Root is NULL!" << endl;
return;
}
BTNode* stack[maxsize];
int top = -1;
BTNode *p = root;
while(top != -1 || p != NULL){
while(p){
stack[++top] = p;
p = p->lchild;
}
//从根节点一直往左子树遍历,如果没有左子树
//打印这个节点,往右节点移动
p = stack[top--];
cout << p->val << " ";
p = p->rchild;
}
} void PostOrderRecursion(BTNode *root){
if(root){
PostOrderRecursion(root->lchild);
PostOrderRecursion(root->rchild);
cout << root->val << " ";
}
} void PostOrderNoRecursion(BTNode *root){
if(!root){
cout << "Root is NULL!" << endl;
return;
}
BTNode* stack1[maxsize]; int top1 = -1;
BTNode* stack2[maxsize]; int top2 = -1;
//首先把根节点如stack1
stack1[++top1] = root;
while(top1 != -1){
BTNode *p = stack1[top1--];
stack2[++top2] = p;
if(p->lchild)
stack1[++top1] = p->lchild;
if(p->rchild)
stack1[++top1] = p->rchild;
}
//此时倒序输出stack2即为后序遍历的序列
while(top2 != -1){
BTNode *p = stack2[top2--];
cout << p->val << " ";
}
} int main(){
BTNode *root;
CreateTree(root);
/**
test code
*/
return 0;
}

二叉树的非递归遍历C++实现的更多相关文章

  1. ZT 二叉树的非递归遍历

    ZT 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...

  2. K:二叉树的非递归遍历

    相关介绍:  二叉树的三种遍历方式(先序遍历,中序遍历,后序遍历)的非递归实现,虽然递归方式的实现较为简单且易于理解,但是由于递归方式的实现受其递归调用栈的深度的限制,当递归调用的深度超过限制的时候, ...

  3. [Alg] 二叉树的非递归遍历

    1. 非递归遍历二叉树算法 (使用stack) 以非递归方式对二叉树进行遍历的算法需要借助一个栈来存放访问过得节点. (1) 前序遍历 从整棵树的根节点开始,对于任意节点V,访问节点V并将节点V入栈, ...

  4. C++编程练习(17)----“二叉树非递归遍历的实现“

    二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...

  5. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  6. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  7. c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)

    二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...

  8. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  9. 非递归遍历二叉树Java实现

    2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...

随机推荐

  1. echarts更改坐标轴文字颜色及大小

    xAxis: { data: anameArr, axisLabel: { show: true, textStyle: { color: '#c3dbff', //更改坐标轴文字颜色 fontSiz ...

  2. DbCommand :执行超时已过期。完成操作之前已超时或服务器未响应。

    问题:“Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应.”的解决方法 在一个链接数据库的时候,老是出现超时的错误:执行超时已过期.完成操作之前已超时或服务器未响应. 就是给这个链接 ...

  3. mong 按 geometry 搜索 地理位置信息

    看 地理位置索引的使用 $near $geometry

  4. 个人第三次作业——结对编程 (姜玖林&于丁)

    博客要求 Github项目地址:https://github.com/zhibihuayue/PairProgramming 作业地址 : https://www.cnblogs.com/cheris ...

  5. Dynamics 365 CRM Connected Field Service 不能接收IoT Alert

    今天浪费了2,3个小时再connected field service(CFS)上面. 状况如下 1. 在CFS中添加了新的customer assets,并且点击了注册按钮. 2. 注册步骤一直在i ...

  6. JS基础——ATM机终端程序编写(3.0)

    利用函数进行代码实现,要点:将每一项操作单独写成一个函数,在需要时进行调用,弄清参数的传递. 创建模拟账户 使用数组创建账户 let user = ["xiaohei", 1234 ...

  7. 谈谈模型融合之三 —— GBDT

    前言 本来应该是年后就要写的一篇博客,因为考完试后忙了一段时间课设和实验,然后回家后又在摸鱼,就一直没开动.趁着这段时间只能呆在家里来把这些博客补上.在之前的文章中介绍了 Random Forest ...

  8. 通过haar Cascades检测器来实现面部检测

    在OpenCV中已经封装的很好只需要使用cv::CascadeClassifier类就可以很容易的实现面部的检测, 三大步: 1.训练好的特征分类器配置文件haarcascade_frontalfac ...

  9. Python PE8编程规范

    参考博客:https://blog.csdn.net/weixin_39723544/article/details/82144280 1.使用四个空格而不是tab进行缩进 2.默认使用utf-8编码 ...

  10. codeforces 1278F - Cards(第二类斯特林数+二项式)

    传送门 解题过程: \(答案=\sum^n_{i=0}*C^i_n*{\frac{1}{m}}^i*{\frac{m-1}{m}}^{n-i}*i^k\) 根据第二类斯特林数的性质\(n^k=\sum ...