数据结构入门小结之树
来源:互联网 发布:人工智能伏羲觉醒2电影 编辑:程序博客网 时间:2024/05/24 07:29
(1) 二叉树的存储单元:
template <typename T>struct BiNode{T data;BiNode<T>* lch;BiNode<T>* rch;};
(2)前序遍历:
递归实现:
template <class T>void BiTree<T>::PreOrder(Node<T>* R){ if(R != NULL) { cout<<R->data; PreOrder(R->lch); PreOrder(R->rch); }}
非递归实现:
template <class T> void BiTree<T>::PreOrder(Node<T> *R){ BiNode<T>* S[100]; int top = -1; while((top != -1)|| (R != NULL)) { if (R != NULL) { cout<<R->data; S[++top]; R = R->lch; } else { R = S[top--]; R = R->rch; } }}
(3)中序遍历
递归实现:
template <class T>void BiTree<T>::InOrder(Node<T>* R){ if(R != NULL) { InOrder(R->lch); cout<<R->data; InOrder(R->rch); }}
非递归实现:
template <class T> void BiTree<T>::InOrder(Node<T> *R){BiNode<T>* S[100]; int top = -1;while((top != -1)|| (R != NULL)){if (R != NULL){ S[++top];R = R->lch;}else{ R = S[top--]; cout<<R->data; R = R->rch; }}}
(4)后续遍历:
递归实现:
void BiTree<T>::PostOrder(Node<T>* R){ if(R != NULL) { PostOrder(R->lch); PostOrder(R->rch); cout<<R->data; }}
非递归实现:
由于后序遍历访问根结点的指针是在遍历完左子树和右子树后,所以需要
判别是左子树返回还是右子树返回,因此栈结点的结构需要额外的一个标记
tag,1代表左子树返回,2代表右子树返回。
template <typename T>struct SNode{BiNode<T>* ptr;int tag;};
template <typename T>void BiTree<T>::PostOrder(BiNode<T>* root){SNode S[100];int top = -1;BiNode<T>* R = root;do {while(R != NULL){S[++top].ptr = R;S[top].tag = 1;R = R->lch;}while((top != -1) && (S[top].tag == 2)){cout<<S[top--].ptr->data;}if ((top != -1) && (S[top].tag == 1)){R = S[top].ptr->rch;S[top].tag = 2;}} while(top != -1);}
(5)层次遍历
根节点非空,入队;
如果队列不空
{
对头元素出队;
访问该元素;
若该结点的左孩子非空,则左孩子入队;
若该结点的右孩子非空,则右孩子入队;
}
template <typename T>void BiTree<T>::LevelOrder(BiNode<T>* R){BiNode<T>* queue[MAXSIZE];int f = 0;int r = 0;if (R != NULL)queue[++r] = R;while(f != r){BiNode<T>* p = queue[++f];cout<<p->data;if (p->lch != NULL)queue[++r] = p->lch;if(p->rch != NULL)queue[++r] = p->rch;}}
- 数据结构入门小结之树
- 数据结构入门小结之字符串
- 数据结构入门小结之查找
- 数据结构入门小结之排序
- 数据结构入门小结之链表
- 数据结构学习之二叉树小结
- 实用数据结构之二叉排序树小结
- JSON入门级学习小结--JSON数据结构
- JSON入门级学习小结--JSON数据结构
- [数据结构-划分树小结]
- 字典树入门小结
- 数据结构学习之链表小结
- 实用数据结构总结之哈夫曼树小结
- 数据结构之静态链表小结
- VC++/halcon入门之数据结构
- 《pandas入门》之基本数据结构
- 数据结构小结(六)树
- 数据结构之线段树 入门HDU1556 color the ball
- 多点触控测试代码 PointerLocation
- An internal error occurred during: "Launching New_configuration".(
- 我想用asp编写一个网站,我现在才刚开始学C#和SQL以及HTML。谁能详细地告诉我为了组建一个网站,它们之间到底有什么联系?是怎么联系的?比如,怎么样就能用C#调取数据库,而HTML又是怎么和C#联
- 一个完整的项目管理流程
- button cannot resolved to a type
- 数据结构入门小结之树
- 求数组中和最大的子数组【算法】
- flex中dictionary跟Object的区别与遍历
- Linux下vmstat调优工具的深入分析
- SPOJ 1793. Text Generater II
- 关于位运算的重要应用
- 数据算法--八种排序
- 关于使用gdb的一些建议
- A Little About Digital Audio and Linear PCM