逆序的BSF输出
2015-08-04 19:27
204 查看
查看逆序的BSF输出如图所示:
这里,我们首先创建一颗二叉树,并使用先序遍历,依次计算其中每个节点的深度,其次利用BSF算法,利用deque获得序列,但同时使用vector只进行push_back无pop_front
这样,vector中就是根据BSF优先算法获得的序列,但还是没有逆序,就利用深度的不同获得,依次递减,进行输出:
这里,我们首先创建一颗二叉树,并使用先序遍历,依次计算其中每个节点的深度,其次利用BSF算法,利用deque获得序列,但同时使用vector只进行push_back无pop_front
这样,vector中就是根据BSF优先算法获得的序列,但还是没有逆序,就利用深度的不同获得,依次递减,进行输出:
#include "stdafx.h" #include<iostream> #include<vector> #include<deque> using namespace std; struct Node{ char val; int Depth; Node* left; Node* right; Node(char x=0):val(x),left(NULL),right(NULL),Depth(0){ } }; Node* g_root; vector<Node*>g_vec; int GetNodeDepth(Node* root,Node* cur,int layer) { int i=-1; if(NULL!=root) { if(root==cur) { return layer; } i=GetNodeDepth(root->left,cur,layer+1); if(i!=-1) { return i; } i=GetNodeDepth(root->right,cur,layer+1); if(i!=-1) return i; } return i; } void Travel(Node* root) { if(NULL==root) { return ; } int depth=GetNodeDepth(g_root,root,0); root->Depth=depth; Travel(root->left); Travel(root->right); } void BSF(Node* root) { if(NULL==root) { return; } deque<Node*>deq; deq.push_back(root); g_vec.push_back(root); while(!deq.empty()) { Node* tmp=deq.front(); deq.pop_front(); if(tmp->left!=NULL) { deq.push_back(tmp->left); g_vec.push_back(tmp->left); } if(tmp->right!=NULL) { deq.push_back(tmp->right); g_vec.push_back(tmp->right); } } } int main() { Node *tmp ; Node* root = new Node('A'); g_root=root; tmp = new Node('B'); root->left = tmp ; tmp = new Node('C'); root->right = tmp; tmp = new Node('D'); root->left->right = tmp; tmp = new Node('E'); root->right->left = tmp; tmp=new Node('F'); root->right->right=tmp; tmp=new Node('G'); root->right->left->left=tmp; tmp=new Node('H'); root->right->left->right=tmp; //首先遍历整个二叉树,同时填充深度 Travel(g_root); //使用BSF光度优先算法进行g_vec的填充 BSF(g_root); //逆序输出 vector<Node*>::reverse_iterator pitr=g_vec.rbegin(); int cur=(*pitr)->Depth; for(int i=cur;i>=0;i--) { vector<Node*>::iterator itr=g_vec.begin(); for(itr=g_vec.begin();itr!=g_vec.end();itr++) { if(i==(*itr)->Depth) { cout<<(*itr)->val<<" "; } } cout<<endl; } return 0; }
相关文章推荐
- 图论:fleury算法
- Spring中RedirectAttributes对象重定向传参
- 15/8/4反射,注解,工程设计模式,线程
- 公钥,私钥和数字签名
- HDOJ 5349 MZL's simple problem 【set】
- wikioi 1294 全排列
- HDOJ 5349 MZL's simple problem 【set】
- HDU 3720 Arranging Your Team
- HDOJ 1050 Moving Tables(贪心)
- 设计模式——适配器模式
- 可变参数
- css3属性笔记
- CSS理解样式表层叠
- Struts2工作原理
- linux 把文件安装到指定路径
- 100分程序员的8个习惯
- [MetaHook] Load DTX texture to OpenGL
- 用数组求一组数的最大值、最小值和平均值,并求有多少个数超过平均数
- Runnable和Thread基础---多线程学习笔记(二)
- Runnable和Thread基础---多线程学习笔记(二)