题目:从上往下打印出二叉树的每一个结点。同一层的结点依照从左到右的顺序打印。比如输入图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; }
/* 点滴积累,我的一小步 */