树之非递归二叉树先序 中序 后序遍历合集
来源:互联网 发布:大数据工程师工作强度 编辑:程序博客网 时间:2024/06/07 06:47
非递归二叉树前序 中序 后序遍历合集
先序遍历算法描述
若 p 所指结点不为空,则访问该结点,然后将该结点的地址入栈,然后再将 p 指向其左孩子结点;若p所指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址),将 p 指向其右孩子结点。重复上述过程,直到 p = NULL 且堆栈为空,遍历结束。
中序遍历算法描述
若 p 所指结点不为空,则将该结点的地址 p 入栈,然后再将 p 指向其左孩子结点;若 p 所指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址)送 p,并访问该结点,然后再将 p 指向该结点的右孩子结点。重复上述过程,直到 p = NULL 且堆栈为空,遍历结束。
后序算法描述
当 p 指向某一结点时,不能马上对它进行访问,而要先访问它的左子树,因而要将此结点的地址入栈;当其左子树访问完毕后,再次搜索到该结点时(该结点地址通过退栈得到),还不能对它进行访问,还需要先访问它的右子树,所以,再一次将该结点的地址入栈。只有当该结点的右子树访问完毕后回到该结点时,才能访问该结点。为了标明某结点是否可以访问,引入一个标志变量flag,当 flag = 0 时表示该结点暂不访问, flag = 1 时表示该结点可以访问。 flag 的值随同该结点的地址一起入栈和出栈。因此,算法中设置了两个堆栈,其中 STACK1 存放结点的地址, STACK2 存放标志变量 flag,两个堆栈使用同一栈顶指针 top,且 top 的初始值为 −1。
代码实现
#include<stdio.h>#include<malloc.h>#include<iostream>using namespace std;#define MaxSize 100typedef struct BTNode{ char data; struct BTNode *lchild, *rchild;}BTNode;void CreateTree(BTNode *& T){ char c; cin >> c; if (c == '0') { T = NULL; } else { T = (BTNode*)malloc(sizeof(BTNode)); T->data = c; CreateTree(T->lchild); CreateTree(T->rchild); }}void Visit(BTNode *p){ printf("%c ", p->data);}void preOrder(BTNode *T){ BTNode *p, *s[MaxSize]; int top = -1; p = T; while (p != NULL || top != -1) { while (p != NULL) { Visit(p); s[++top] = p; p = p->lchild; } p = s[top--]; p = p->rchild; }}void inOrder(BTNode *T){ BTNode *p, *s[MaxSize]; int top = -1; p = T; while (p != NULL || top != -1) { while (p != NULL) { s[++top] = p; p = p->lchild; } p = s[top--]; Visit(p); p = p->rchild; }}void postOrder(BTNode *T){ BTNode *p, *s1[MaxSize]; int s2[MaxSize]; int flag, top = -1; p = T; while (p != NULL || top != -1) { while (p != NULL) { s1[++top] = p; s2[top] = 0; p = p->lchild; } p = s1[top]; flag = s2[top--]; if (flag == 0) { s1[++top] = p; s2[top] = 1; p = p->rchild; } else { Visit(p); p = NULL; } }}int main(){ //freopen("E:\input.txt", "r", stdin); BTNode *T; CreateTree(T); preOrder(T); printf("\n"); getchar(); inOrder(T); printf("\n"); getchar(); postOrder(T); printf("\n"); return 0;}
Input
abc00de0g00f000
Ontput
a b c d e f gc b e g d f ac g e f d b a
0 0
- 树之非递归二叉树先序 中序 后序遍历合集
- leetCode之非递归中序遍历、后序遍历二叉树
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序的非递归遍历
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序,中序,后序遍历非递归实现
- 二叉树非递归前、中、后序遍历
- 二叉树非递归前、中、后序遍历实现
- 二叉树的非递归【前/中/后 序遍历】
- 非递归前,中,后序遍历二叉树
- 后序遍历二叉树非递归
- 非递归后序遍历二叉树
- 非递归后序遍历二叉树
- 非递归后序遍历二叉树
- Windows 系统 Github push 或者 下载慢
- 一直以来都没直视的轮播-_-
- 牛客网—剑指offer-用两个栈实现队列
- Android.mk 文件,多个mk文件
- boost::exception
- 树之非递归二叉树先序 中序 后序遍历合集
- Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
- 【ORACLE】报错IMP-00003ORA-02304IMP-00017
- Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
- Java开发中的23种设计模式详解(转)
- [BZOJ 2741]【FOTILE模拟赛】L 分块+可持久trie树
- 【P3056】【USACO12NOV】笨牛Clumsy Cows
- java通过匹配合并数据(数据预处理)
- 用C语言实现一个简单的HTTP Client(HTTP客户端)