二叉树的层序遍历(广度优先遍历)

 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 } 

 

posted on 2013-10-28 19:10  samules  阅读(398)  评论(0编辑  收藏  举报

导航