逆序的BSF输出

来源:互联网 发布:新版mac mini 发布时间 编辑:程序博客网 时间:2024/05/21 12:17

查看逆序的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;  }   


0 0
原创粉丝点击