微软100题(16)二叉树的层序遍历
来源:互联网 发布:淘宝上的雷锋侠 编辑:程序博客网 时间:2024/05/11 00:39
题目(微软): 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8
/ \
6 10
/ \ / \
5 7 9 11 输出8 6 10 5 7 9 11。
二叉树的层序遍历
void BinaryTreeBFS(BinaryTreeNode* proot){if(proot==NULL) return;deque<BinaryTreeNode*> nodequeue;BinaryTreeNode* pNode;nodequeue.push_back(proot);while (!nodequeue.empty()){pNode = nodequeue.front();cout<<pNode->m_value<<" ";if(pNode->m_left)nodequeue.push_back(pNode->m_left);if(pNode->m_right)nodequeue.push_back(pNode->m_right);nodequeue.pop_front();}}
顺便付一下二叉树的八种遍历
<span style="font-size:14px;">typedef struct Node { int data; struct Node *lchild; struct Node *rchild;} *Tree;1.前序遍历 递归写法:void PreOrder(Tree root)//递归前序遍历{ if(root==NULL) return; cout<<root->data; PreOrder(root->lchild); PreOrder(root->rchild);}非递归写法void PreOrderNonRecursion(Tree root)//非递归算法{ stack<Node *> nonstack; nonstack.push(root); Node *node; while(!nonstack.empty()) { node=nonstack.top(); cout<<node->data; nonstack.pop(); if(node->rchild) nonstack.push(node->rchild); if(node->lchild) nonstack.push(node->lchild); }}2中序遍历递归写法:void InOrder(Tree root)//中序遍历递归{ if(root!=NULL) { InOrder(root->lchild); cout<<root->data; InOrder(root->rchild); } }非递归写法void InOrderNonRecursion(Tree root)//中序非递归算法{ stack<Node *> nonstack; Node *node=root; while(node || !nonstack.empty()) { if(node) { nonstack.push(node); node=node->lchild; } else { node=nonstack.top(); cout<<node->data; nonstack.pop(); node=node.rchild; } }}3.后序遍历 递归写法:void PostOrder(Tree root)//后序遍历递归{ if(root!=NULL) { PostOrder(root->lchild); PostOrder(root->rchild); cout<<root->data; }}非递归写法:void PostOrderNonRecursion(Tree root){ stack<Node *> pstack; Node* node=root; int flag[20]; while(node) { pstack.push(node); flag[pstack.size()]= 0; node=node->lchild; } while(!pstack.empty()) { node=pstack.top(); while(node->rchild && flag[pstack.size()]==0) { flag[pstack.size()]=1; node=node->rchild; while(node) { pstack.push(node); flag[pstack.size()]=0; node=node->lchild; } } node=pstack.top(); cout<<node->data; pstack.pop(); }}4.深度优先搜索void DepthFirstTraverse(Tree root){ stack<Node*> pstack; pstack.push(root); Node *node; while (!pstack.empty()) { node=pstack.top(); cout<<node->data; pstack.pop(); if(node->rchild) pstack.push(node->rchild); if(node->lchild) pstack.push(node->lchild); }}5.广度优先搜索void BreadFirstTraverse(Tree root){ queue<Node *> nodequeue; nodequeue.push(root); Node * node; while(!nodequeue.empty()) { node=nodequeue.front(); cout<<node->data; nodequeue.pop(); if(node->lchild) nodequeue.push(node->lchild); if(node->rchild) nodequeue.push(node->rchild); }}
0 0
- 微软100题(16)二叉树的层序遍历
- 二叉树(二)二叉树的层序遍历
- 微软等数据结构+算法面试100题(41)-- 二叉树的前序遍历
- 微软100题(9) 二叉搜索树的后序遍历
- 微软100题(43)二叉树的前序遍历
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 二叉树的遍历(层遍历和深度遍历)
- 微软面试100题系列---二叉树的层次遍历
- 【100题】二叉树的层序遍历(广度优先遍历)
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 《netty权威指南》13文件传输
- GEM5: Different cache latency for read and write access 设置不同的读写latency
- 浅谈策略模式(strategy)
- 无约束最优化方法——牛顿法、拟牛顿法、BFGS、LBFGS
- cocos2dx 3.2 getBoundingBox和getTextureRect
- 微软100题(16)二叉树的层序遍历
- 十二周——杭电——1002Delta-Wave
- 判断UISrollview的滑动方向
- 黑马程序员--ios中 property的参数
- Thinking in java(java编程思想)(1-6章)
- 河南一女子因家暴砍死丈夫获从宽判处
- python两种遍历字典(dict)的方法比较
- SDWebImage的使用
- Hadoop分布式安装