经典算法之非递归算法实现二叉树前、中、后序遍历
来源:互联网 发布:js获取当前城市名称 编辑:程序博客网 时间:2024/05/22 03:15
/************************author's email:wardseptember@gmail.comdate:2017.12.24非递归算法实现二叉树前、中、后序遍历************************/#include<iostream>using namespace std;#define maxsize 100typedef struct BTNode{char data;struct BTNode *lchild;struct BTNode *rchild;}BTNode,*BTree;BTree createTree();void preorderNonrecursion(BTNode *p);void inorderNonrecursion(BTNode *p);void postorderNonrecursion(BTNode *p);int main(){BTree ptree;ptree = createTree();cout << "非递归算法实现二叉树前序遍历:";preorderNonrecursion(ptree);cout << endl;cout << "非递归算法实现二叉树中序遍历:";inorderNonrecursion(ptree);cout << endl;cout << "非递归算法实现二叉树后序遍历:";postorderNonrecursion(ptree);cout << endl;return 0;}BTree createTree() {BTree pA = (BTNode *)malloc(sizeof(BTNode));BTree pB = (BTNode *)malloc(sizeof(BTNode));BTree pC = (BTNode *)malloc(sizeof(BTNode));BTree pD = (BTNode *)malloc(sizeof(BTNode));BTree pE = (BTNode *)malloc(sizeof(BTNode));BTree pF = (BTNode *)malloc(sizeof(BTNode));BTree pG = (BTNode *)malloc(sizeof(BTNode));BTree pH = (BTNode *)malloc(sizeof(BTNode));BTree pI = (BTNode *)malloc(sizeof(BTNode));pA->data = 'A';pB->data = 'B';pC->data = 'C';pD->data = 'D';pE->data = 'E';pF->data = 'F';pG->data = 'G';pH->data = 'H';pI->data = 'I';pA->lchild = pC;pA->rchild = pB;pC->lchild = pD;pC->rchild = pE;pB->rchild = pF;pB->lchild = NULL;pD->lchild = pG;pD->rchild = NULL;pE->lchild = NULL;pE->rchild = pH;pF->lchild = pI;pF->rchild = NULL;pG->lchild = pG->rchild = NULL;pH->lchild = pH->rchild = NULL;pI->lchild = pI->rchild = NULL;return pA;}//非递归算法实现二叉树前序遍历void preorderNonrecursion(BTNode *p) {if (p != NULL) {BTNode *Stack[maxsize];int top = -1;BTNode *q;Stack[++top] = p;while (top != -1){q = Stack[top--];cout << q ->data;if (q->rchild != NULL)Stack[++top] = q->rchild;if (q->lchild != NULL)Stack[++top] = q->lchild;}}}//非递归算法实现二叉树中序遍历void inorderNonrecursion(BTNode *p) {if (p != NULL) {BTNode *Stack[maxsize];int top = -1;BTNode *q;q = p;while (top != -1 || q != NULL){while (q!= NULL) { //左孩子存在,则左孩子进栈Stack[++top] = q;q = q->lchild;}if (top != -1) {q = Stack[top--];cout << q->data;q = q->rchild;}}}}/*用两个栈实现非递归二叉树后序遍历,逆后序遍历是将前序遍历过程对左右子树遍历顺序交换,第二个栈用于把逆后序遍历变成后序遍历*/void postorderNonrecursion(BTNode *p){if (p != NULL){BTNode *Stack1[maxsize];int top1 = -1;BTNode *Stack2[maxsize];int top2 = -1;BTNode *q = NULL;Stack1[++top1] = p;while (top1 != -1){q = Stack1[top1--];Stack2[++top2] = q;//栈一出栈元素进入栈二if (q->lchild != NULL)Stack1[++top1] = q->lchild;if (q->rchild != NULL)Stack1[++top1] = q->rchild;}while (top2!= -1){q = Stack2[top2--];cout << q->data;}}}
阅读全文
0 0
- 经典算法之非递归算法实现二叉树前、中、后序遍历
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- 用java实现二叉树非递归的前序,中序,后序遍历算法
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- 二叉查找树的概念以及实现 前序、中序和后序递归非递归遍历算法
- 二叉树的前序、中序、后序的递归与非递归遍历算法实现
- 二叉树的前序、中序、后序的递归与非递归遍历算法实现(待完善)
- 二叉树的遍历(前 中 后序 )递归 非递归算法
- (前、中、后)序遍历二叉树的递归、非递归算法!
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- 二叉树非递归前、中、后序遍历实现
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- 二叉树的前序/中序/后序/层序的非递归遍历算法
- 二叉树的非递归前序,中序,后序遍历算法
- 二叉树的遍历: 前序,中序,后序----非递归算法
- 前序/中序/后序遍历二叉树的非递归算法
- 【二叉树】非递归遍历的通用算法:前序、中序和后序
- 二叉树的前/中/后序遍历算法(非递归)
- 剑指Offer---正则表达式匹配
- C语言中的typedef struct用法
- 最高 3.9 GHz CPU 时脉、Vega M 图形核心 Intel Core i7-8709G 处理器资料曝光
- Oracle rownum的理解以及rownum分组出现重复数据的解决方法
- 10.9、spring boot的web应用——拦截器的应用
- 经典算法之非递归算法实现二叉树前、中、后序遍历
- Hdoj 1715 大菲波数
- UDP
- calico deep dive
- mybatis插件
- 【学习】——执行力
- Spring基于xml的构造方法注入&setter注入
- mybatis学习参考
- CodeForces 68 A.Irrational problem(水~)