题目:从上往下打印出二叉树的每一个结点。同一层的结点依照从左到右的顺序打印。比如输入图4.5中的二叉树。则依次打印出8、6、10、5、7、9、11。
8
/ \
6 10
/ \ / \
5 7 9 11
思路:树的层序遍历。应用 队列 这一数据容器。如上图的输出顺序,每当父结点出队(输出),孩子结点才会入队。
算法例如以下:
/**层序遍历*/
void PrintFromToBottom(TreeNode *pRoot)
{
if(NULL == pRoot)
return; queue<TreeNode *> temp; /**定义一个存放二叉树结点的队列*/
temp.push(pRoot); /**头结点入栈*/ while(!temp.empty())
{
TreeNode *p = temp.front(); /**获取队列头部数据*/
cout << p->m_pValue << ' '; temp.pop(); /**头部数据出栈,让它的左右孩子结点入栈*/ if(p->lchild)
temp.push(p->lchild);
if(p->rchild)
temp.push(p->rchild);
}
cout << endl;
}
/* 点滴积累,我的一小步 */