数据结构之C/C++实现二叉树的链式存储
2018-07-24 15:03
931 查看
/** * 2018年7月20日16:51:54 * 二叉树的链式存储 */ #include <malloc.h> #include <iostream> #include <string> using namespace std; typedef char ElemType;//结点数据域的类型 #define MaxSize 15 //二叉树的链式存储结构 typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; //树指针的队列 typedef struct { BiTree data[MaxSize]; int front, rear; } SqQueue; //创建二叉树 //ab c d ; //120300400; bool CreateBiTree(BiTree &T) { ElemType s; cout << "请输入一个字母:"; cin >> s; if(s=='0') { exit(-1); } if(s=='#') { T = NULL; } else { //创建结点 T = (BiTNode *)malloc(sizeof(BiTNode)); T->data = s; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return true; } //前序遍历 bool PreOrder(BiTree &T) { if(T==NULL) { return 0; } cout <<"结点的值为:"<< T->data <<endl; PreOrder(T->lchild); PreOrder(T->rchild); return true; } //中序遍历 bool InOrder(BiTree &T) { if(T==NULL) { return 0; } InOrder(T->lchild); cout <<"结点的值为:"<< T->data <<endl; InOrder(T->rchild); return true; } //后序遍历 bool PostOrder(BiTree &T) { if(T==NULL) { return 0; } PostOrder(T->lchild); PostOrder(T->rchild); cout <<"结点的值为:"<< T->data <<endl; return true; } //初始化循环队列 void InitQueue(SqQueue &Q){ Q.front = Q.rear = 0; } //判断队空 bool IsEmpty(SqQueue &Q){ if(Q.front==Q.rear){ return true; }else { return false; } } //入队一个元素 bool EnQueue(SqQueue &Q, BiTree x){ //判断队是否满 if(Q.front==(Q.rear+1)%MaxSize){ return false; } Q.data[Q.rear] = x; Q.rear = (Q.rear+1)%MaxSize; return true; } //出队一个元素 bool DeQueue(SqQueue &Q, BiTree &x){ //判断队列是否为空 if(Q.front==Q.rear){ return false; } x = Q.data[Q.front]; Q.front = (Q.front+1)%MaxSize; return true; } //层次遍历 void LeverOrder(BiTree &T) { SqQueue Q; InitQueue(Q); BiTree p; EnQueue(Q, T); //将根结点入队 while(!IsEmpty(Q)) { DeQueue(Q, p); cout <<"层次遍历为:"<< p->data << endl; //如果出队结点左孩子不空,进队 if(p->lchild!=NULL) { EnQueue(Q, p->lchild); } //如果出队结点右孩子不空,进队 if(p->rchild!=NULL) { EnQueue(Q, p->rchild); } } } int main() { BiTree T; cout << CreateBiTree(T)<< endl; PreOrder(T); //前序遍历:abcd(1234) InOrder(T); //中序遍历:bcad(2314) PostOrder(T);//后序遍历:cbda(3241) LeverOrder(T);//层次遍历:abdc(1243) return 0; }
相关文章推荐
- 二叉树的链式存储结构 C++代码实现
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- C++数据结构之 --二叉树简单实现和4种遍历
- 数据结构:图(邻接表存储 c++实现)
- 数据结构与算法——表达式树类的C++实现(二叉树)
- 数据结构:图(十字链表存储 c++实现)
- 算法与数据结构基础4:C++二叉树实现及遍历方法大全
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 数据结构之循环队列(顺序表存储)——C++模板类实现
- 【数据结构与算法】二叉树给定两个节点的最短距离(C++实现)
- 数据结构把顺序存储的二叉树转换成链式存储及前序,中序,后序遍历
- 树型结构数据在关系数据库中用链式存储相关查询实现
- 数据结构(五)---栈的链式存储的实现---java版
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- (原创)基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- 数据结构(java语言描述)-- 二叉查找树的链式存储结构的实现
- 数据结构之---C语言实现二叉树的顺序存储
- 数据结构——二叉树的链式实现(C语言)