二叉树的层序遍历(广度优先遍历)
1 #include <iostream> 2 #include <deque> 3 using namespace std; 4 5 //树结构 6 struct BTreeNode 7 { 8 int m_nValue; 9 BTreeNode *m_pLeft; 10 BTreeNode *m_Right; 11 }; 12 13 //层序遍历二叉树,即广度优先。 14 void Print(BTreeNode *pNode) 15 { 16 if(!pNode) 17 { 18 return ; 19 } 20 21 deque<BTreeNode *> dequeTree; 22 dequeTree.push_back(pNode); 23 24 while(dequeTree.size()) 25 { 26 BTreeNode *p = dequeTree.front(); 27 dequeTree.pop_front(); 28 29 cout << p->m_nValue <<' '; 30 31 if(p->m_pLeft) 32 { 33 dequeTree.push_back(p->m_pLeft); 34 } 35 if(p->m_Right) 36 { 37 dequeTree.push_back(p->m_Right); 38 } 39 } 40 } 41 42 //按照先序创建二叉树,0表示空 43 BTreeNode *CreateTree() 44 { 45 int ch; 46 cin>> ch; 47 if(ch == 0) 48 { 49 return NULL; 50 } 51 else 52 { 53 BTreeNode *root = new BTreeNode(); 54 root->m_nValue = ch; 55 root->m_pLeft = CreateTree(); 56 root->m_Right = CreateTree(); 57 return root; 58 } 59 } 60 61 void main() 62 { 63 BTreeNode *root = NULL; 64 cout <<"创建树:"; 65 root = CreateTree(); 66 cout << "层序遍历:"; 67 Print(root); 68 cout << endl; 69 }