【数据结构】之一、二叉树创建,前中后序遍历
来源:互联网 发布:中国法律大全软件 编辑:程序博客网 时间:2024/05/06 11:14
代码积累日志!
http://zh.wikipedia.org/wiki/%E4%BA%8C%E5%8F%89%E6%A0%91 这里都有介绍二叉树的基本概念!
下面看二叉树数据结构:
#define Type chartypedef struct BiTNode{Type data;struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;typedef struct{BiTree data;bool is;}PostNode;
下面看二叉树基本操作:
BiTree CreateTree(){BiTree T = NULL;Type e;cout << "请输入数据(#结束):";cin >> e;if(e != '#'){T = (BiTree)malloc(sizeof(BiTNode));T->data = e;T->lchild = CreateTree();T->rchild = CreateTree();}elsereturn NULL;return T;}void MakeEmpty(BiTree &T){if(T){if(T->lchild)MakeEmpty(T->lchild);if(T->rchild)MakeEmpty(T->rchild);free(T);T = NULL;}}void Find(BiTree T, Type e){if(T->data == e){cout << "yes" << endl;return ;}else{if(T->lchild)Find(T, e);if(T->rchild)Find(T, e);}cout << "no" << endl;}
下面看前序遍历的递归和非递归操作:
非递归操作需要用到stack结构。
void PreOrderTraverse(BiTree T){if(!T)return ;cout << T->data << endl;PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}void PreOrderTraverse2(BiTree T){stack<BiTNode*> s;BiTree q = T;while(q != NULL || !s.empty()){while(q != NULL){cout << q->data << endl;s.push(q);q = q->lchild;}if(!s.empty()){q = s.top();s.pop();q = q->rchild;}}}
下面看中序遍历的递归和非递归操作:
非递归需要stack结构。
void InOrderTraverse(BiTree T){if(T == NULL)return ;InOrderTraverse(T->lchild);cout << T->data << endl;InOrderTraverse(T->rchild);}void InOrderTraverse2(BiTree T){stack<BiTNode*> s;BiTree q = T;while(q != NULL || !s.empty()){while(q != NULL){s.push(q);q = q->lchild;}if(!s.empty()){q = s.top();cout << q->data << endl;s.pop();q = q->rchild;}}}
非递归也用到stack,这里较麻烦。
void PostOrderTraverse(BiTree T){if(T == NULL)return ;PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);cout << T->data << endl;}void PostOrderTraverse2(BiTree T){stack<PostNode*> s;PostNode* postq;BiTree q = T;while(q != NULL || !s.empty()){while(q != NULL){PostNode *postq = (PostNode*)malloc(sizeof(PostNode));postq->data = q;postq->is = true;s.push(postq);q = q->lchild;}if(!s.empty()){postq = s.top();s.pop();if(postq->is == true){postq->is = false;s.push(postq);q = postq->data->rchild;}else{cout << postq->data->data << endl;q = NULL;}}}}
下面看层序遍历:
此处需要用到队列deque。
void LayerOrderTraverse(BiTree T){deque<BiTree> q;BiTree p;if(T){q.push_back(T);}elsereturn;while(!q.empty()){p = q.front();q.pop_front();cout << p->data << endl;if(p->lchild){q.push_back(p->lchild);}if(p->rchild){q.push_back(p->rchild);}}}
2013.8.2
jofranks 于南昌
- 【数据结构】之一、二叉树创建,前中后序遍历
- 数据结构 二叉树 创建 遍历
- 数据结构 线索二叉树 创建 遍历 插入
- 数据结构之二叉树创建及其遍历
- 数据结构之二叉树创建与遍历
- 数据结构---二叉树的创建和遍历
- 数据结构(十二) 二叉树的基本操作 --- 创建一个二叉树 前中后序遍历二叉树
- 二叉树遍历 - 数据结构
- 数据结构 二叉树遍历
- 数据结构 - 二叉树遍历
- 二叉树遍历 - 数据结构
- 数据结构--二叉树遍历
- 【数据结构】二叉树遍历
- 数据结构-二叉树遍历
- 数据结构--遍历二叉树
- 数据结构二叉树遍历
- 数据结构二叉树遍历
- 数据结构之二叉树的递归创建、递归遍历
- 共享内存多次写入不同类型的数据测试代码
- Foundation-结构体
- ruby 正则表达式
- 著名技术博客收藏
- include&&require
- 【数据结构】之一、二叉树创建,前中后序遍历
- U盘安装CentOS要注意的一些问题
- php代码架构八点要注意
- Chrome MessageLoop类分析
- 【剪枝】HDU 1010——tempter of the bone
- 从获取的图像进行图形匹配
- linux内核学习
- python第三方库系列之二十六--virtualenv库
- ruby on rails的session