二叉树的层序遍历(非递归,借用队列实现)
2017-07-21 19:50
375 查看
1.【基础题】–实现一颗二叉树的层序遍历。
hljs cpp">#include<cassert> #include<queue> using namespace std; template<class T> struct TreeNode { T data; TreeNode* left; TreeNode* right; TreeNode(const T& x=T()) :data(x) ,left(NULL) ,right(NULL) {} }; template<class T> class BinaryTree { typedef TreeNode<T> Node; public: BinaryTree(const T* arr,T invalid,int sz)//有参构造函数 { assert(arr); int index=0; _root=BuildTree(arr,invalid,sz,index); } void SeqOrder()//层序遍历打印 { assert(_root); _SeqOrder(_root); } protected: void _SeqOrder(Node* root) { assert(root); queue<Node*> q; q.push(root); while (!q.empty()) { cout<<q.front()->data<<" "; if (q.front()->left) { q.push(q.front()->left); } if (q.front()->right) { q.push(q.front()->right); } q.pop(); } } Node* BuildTree(const T*arr,T& invalid,int sz, int& index)//前序遍历建树 { assert(arr); if (index<sz && arr[index]!=invalid) { Node* root=new Node(arr[index]); root->left=BuildTree(arr,invalid,sz,++index); root->right=BuildTree(arr,invalid,sz,++index); return root; } return NULL; } protected: Node* _root; }; int main() { int arr[]={1, 2, 3, '#', '#', 4, '#' , '#', 5, 6}; int sz=sizeof(arr)/sizeof(arr[0]); BinaryTree<int> b(arr,'#',sz);//1 2 5 3 4 6 b.SeqOrder(); return 0; }
相关文章推荐
- 二叉树的前/中/后/层序遍历(前/中/后序递归实现,层序队列实现)
- <二叉树 前中后 层序 非递归遍历 c语言实现>
- 二叉树系列(3)层序遍历的非递归实现
- 数据结构 二叉树层序遍历的队列实现
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- 实现二叉树的层序遍历,说说Java中的队列结构(实现一个Java的队列)
- 二叉树前中后序遍历的递归版本和非递归版本、队列实现的层次遍历
- 二叉树前序,中序,后序的遍历【递归(借用栈实现)和非递归】
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 二叉树先序,中序,后序、层序遍历递归和非递归实现
- java实现的二叉树(前序、中序、后序)递归和非递归遍历,包含层序遍历
- C++非递归队列实现二叉树的广度优先遍历
- 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 二叉树的递归、非递归及层序遍历的Java实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现