【数据结构】迭代器实现二叉树的中序遍历
来源:互联网 发布:苹果有些软件不信任 编辑:程序博客网 时间:2024/06/15 12:38
迭代器
template<class T,class Ref,class Ptr>struct __TreeIterator{typedef BinTreeNode<T> Node;typedef __TreeIterator<T,Ref,Ptr> Self;__TreeIterator(){}__TreeIterator(Node* node):_node(node){}Ref operator*(){assert(_node);return _node->_date;}Self& operator++(){assert(_node);if(_node->RightTag==Link){Node* right=_node->rightchild;while (right&&right->LeftTag==Link){right=right->leftchild;}_node=right;}else{_node=_node->rightchild;}return *this;}Self& operator++(int){Self tmp(*this);++(*this);return tmp;}Self& operator--(){assert(_node);if(_node->LeftTag=Link){Node* left=_node->leftchild;while (left&&left->RightTag==Link){left=left->rightchild;}_node=left;}else{_node=_node->leftchild;}return *this;}bool operator!=(const Self s) const{return _node!=s._node;}Node* _node;T表示类型,Ref表示引用,Ptr表示指针
二叉树的实现
需要实现begin和end
template <class T>class BinTree{typedef BinTreeNode<T> Node;public:typedef __TreeIterator<T,T&,T*> Iterator;typedef __TreeIterator<T,const T&,const T* > ConstIterator;Iterator Begin(){Node* cur=_root;while (cur&&cur->LeftTag==Link){cur=cur->leftchild;}return Iterator(cur);}ConstIterator Begin()const;Iterator End(){return Iterator(0);}ConstIterator End()const;BinTree():_root(NULL){}BinTree(T* a,size_t size,const T& invalid):_root(NULL){size_t index=0;_CreateTree( _root,a,size,index,invalid);}void InOrderThead(){Node* pre=NULL;_InOrderThead(_root,pre);}protected:void _CreateTree(Node*& root,T a[],size_t size,size_t& index ,const T& invalid){assert(a);if(index< size&& a[index]!=invalid){root=new Node(a[index]);_CreateTree(root->leftchild,a,size,++index,invalid);_CreateTree(root->rightchild,a,size,++index,invalid);}}void _InOrderThead(Node* root,Node* &pre){ if(root==NULL) return ; _InOrderThead(root->leftchild,pre); if(root->leftchild==NULL) { root->LeftTag=Thread; root->leftchild=pre; } if(pre&&pre->rightchild==NULL) { pre->RightTag=Thread; pre->rightchild=root; } pre=root; _InOrderThead(root->rightchild,pre);}private:Node* _root;};
测试用例
void test(){int a1[10]={1,2,3,'#','#',4,'#','#',5,6};BinTree<int> t1(a1,10,'#');t1.InOrderThead();//t1.InOrder_NonR();BinTree<int>::Iterator it=t1.Begin();cout<<endl;while (it!=t1.End()){cout<<*it<<" ";++it;}cout<<endl;}
0 0
- 【数据结构】迭代器实现二叉树的中序遍历
- 【数据结构】二叉树的中序遍历
- 数据结构-----二叉树的中序遍历的非递归算法实现
- 数据结构 二叉树的递归算法、前序、中序、后序遍历(c语言实现)
- 【数据结构】二叉树结点插入和前序、中序、后序遍历的递归实现
- 数据结构二叉树的实现,前序、中序、后序遍历
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- 数据结构 二叉树的先序 中序 后序遍历(linux 下c语言实现)
- 二叉树的中序遍历实现
- 数据结构/实现二叉树的前序/中序/后序非递归遍历
- 数据结构与算法-实验4-实现二叉树的前、中、后序遍历
- 关于数据结构中二叉树的遍历
- 【数据结构】中二叉树的遍历方式
- 数据结构---线索二叉树的创建、中序遍历
- 数据结构之二叉树的建立及中序遍历
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- C++数据结构--二叉树的前序遍历,中序遍历,后序遍历
- CCF 201609-2 火车购票 解题报告 简单模拟
- TVS管的选取 计算
- apkTool反编译
- 拷贝控制与资源管理
- 常用控件属性合集
- 【数据结构】迭代器实现二叉树的中序遍历
- unity-Navigation寻路-寻路区域和代价 Navigation Areas and Costs
- Android Studio 实用快捷键
- cocos2dx项目使用svn注意事项
- maven安装与配置
- 最清晰的Android多屏幕适配方案
- 自己搭建内网服务器
- 单向链表的反向(算法的基础知识)
- 洛谷 P2335 [SDOI2005]位图