从上往下打印二叉树

要求:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。

算法思想:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有的结点都被打印出来为止。

1 struct BinaryTreeNode //节点
2 {
3     int m_nValue;
4     BinaryTreeNode* m_pLeft;
5     BinaryTreeNode* m_pRight;
6 };

 

 1 //////////////从上往下打印二叉树/////////////////////////
 2 void PrintFromTopToBottom(BinaryTreeNode* pTreeRoot)
 3 {
 4     if (pTreeRoot == NULL)
 5     {
 6         return;
 7     }
 8     list<BinaryTreeNode*> NodeData;
 9     NodeData.push_back(pTreeRoot);
10     BinaryTreeNode* pTemp = 0 ;
11     while (!NodeData.empty())
12     {
13         pTemp = NodeData.front();
14         NodeData.pop_front();
15         cout<<pTemp->m_nValue<<endl;
16         if (pTemp->m_pLeft)
17         {
18             NodeData.push_back(pTemp->m_pLeft);
19         }
20         if (pTemp->m_pRight)
21         {
22             NodeData.push_back(pTemp->m_pRight);
23         }    
24     }
25     
26 }

 

posted @ 2014-05-04 20:14  月轩  阅读(142)  评论(0编辑  收藏  举报