【数据结构实验】二叉树的遍历(数组版)
来源:互联网 发布:mac玩游戏卡 编辑:程序博客网 时间:2024/05/01 04:46
#include <iostream>using namespace std;typedef char TElemType;typedef int Status;#define OK 1#define ERROR 0#define OVERLOW -2typedef struct BiTNode{ TElemType data; struct BiTNode *lchild, *rchild;//左右孩子指针}BiTNode, *BiTree;//================================================================================Status CreatBiTree(BiTree &T)//按次序输入二叉树中结点值,#表示空树{ TElemType ch; cin >> ch; if (ch == '#') T = NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTree)))) exit(OVERLOW); T->data = ch; //生成根结点 CreatBiTree(T->lchild);//构造左子树 CreatBiTree(T->rchild);//构造右子树 } return OK;}//CreatBiTree//==================================================================================Status PreOrderTraverse1(BiTree T)//递归方法 先序遍历二叉树(输出){ if (T != NULL) { cout << T->data; PreOrderTraverse1(T->lchild); PreOrderTraverse1(T->rchild); } return OK;}//PreOrderTraverse1//==================================================================================Status PreOrderTraverse2(BiTree T)//非递归方法 先序遍历二叉树(输出){ BiTree p; p = T; BiTree stack[20]; int num = 0; while (p != NULL || num > 0) { while (p != NULL) { cout << p->data; stack[num++] = p; p = p->lchild; } num--; p = stack[num]; p = p->rchild; } cout << endl; return OK;}//PreOrderTraverse2//==================================================================================Status InOrderTraverse1(BiTree T)//递归方法 中序遍历二叉树(输出){ if (T != NULL) { InOrderTraverse1(T->lchild); cout << T->data; InOrderTraverse1(T->rchild); } return OK;}//InOrderTraverse1//==================================================================================Status InOrderTraverse2(BiTree T)//非递归方法 中序遍历二叉树(输出){ BiTree p; p = T; BiTree stack[20]; int num = 0; while (p != NULL || num > 0) { while (p != NULL) { stack[num++] = p; p = p->lchild; } num--; p = stack[num]; cout << p->data; p = p->rchild; } cout << endl; return OK;}//InOrderTraverse2//==================================================================================Status PostOrderTraversr1(BiTree T)//递归方法 后序遍历二叉树(输出){ if (T != NULL) { PostOrderTraversr1(T->lchild); PostOrderTraversr1(T->rchild); cout << T->data; } return OK;}//PostOrderTraversr1//==================================================================================Status PostOrderTraversr2(BiTree T)//非递归方法 后序遍历二叉树(输出){ BiTree p; p = T; BiTree stack[20]; int num = 0; BiTree HaveVisited = NULL; while (p != NULL || num > 0) { while (p != NULL) { stack[num++] = p; p = p->lchild; } p = stack[num-1]; if (p->rchild == NULL || HaveVisited == p->rchild) { cout << p->data; num--; HaveVisited = p; p = NULL; } else p = p->rchild; } cout << endl; return OK;}//PostOrderTraversr2//==================================================================================int main(){ BiTree T; cout << "请输入结点字符(#表示空树):(如A)" << endl; CreatBiTree(T); cout << "1:递归方法 先序遍历的值为" << endl; PreOrderTraverse1(T); cout << endl; cout << "2:非递归方法 先序遍历的值为" << endl; PreOrderTraverse2(T); cout << "3:递归方法 中序遍历的值为" << endl; InOrderTraverse1(T); cout << endl; cout << "4:非递归方法 中序遍历的值为" << endl; InOrderTraverse2(T); cout << "5:递归方法 后序遍历的值为" << endl; PostOrderTraversr1(T); cout << endl; cout << "6:非递归方法 后序遍历的值为" << endl; PostOrderTraversr2(T); return OK;}
11 0
- 【数据结构实验】二叉树的遍历(数组版)
- 数据结构实验之二叉树的遍历
- 【数据结构实验】二叉树的遍历(栈版)
- 二叉树的遍历:数据结构实验之二叉树二:遍历二叉树
- [C++ 二叉树的构建与遍历] 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验(严蔚敏版)二叉树的建立与遍历
- [C++]数据结构实验05:二叉树的遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- strcpy的实现
- 浅谈大数据bigbigbigdata
- 物联网与嵌入式系统概论-week1-What Is the IoT- Lesson3: The Importance of the IoT
- 花10分钟看一看少走30年弯路
- 常用网址
- 【数据结构实验】二叉树的遍历(数组版)
- 51nod 1276 岛屿的数量(贪心策略__锻炼思维)
- 关于Oracle事务的总结
- 百度POI实现周边搜索及公交路线查询
- DOM学习笔记整理
- ios中的推送通知
- 文章标题
- datanode/secondarynamenode的那些事
- Python笔记,简略版