二叉树结点定义如下:
struct BinaryTreeNode{
int value;
BinaryTreeNode *pLeft;
BinaryTreeNode *pRight;
};
分析:按层打印的顺序决定了我们应该先打印根节点,之后为了打印根节点的左右结点,我们需要把这两个子结点保存到一个queue的容器中。之后读取左结点,把它打印出来后,若它包含孩子结点,则还是按照顺序将它的孩子结点保存到队列的末尾。最后到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印为止。
代码实现:
void printFromTopToBottom( BInaryTreeNode *root){
if( !root )
return;
std::queue<BinaryTreeNode *> dequeTreeNode;
dequeTreeNode.push_back(root);
while( dequeTreeNode.size() ){
BinaryTreeNode *Node = dequeTreeNode.front();
dequeTreeNode.pop_front();
printf("%d", Node->value );
if( Node->pLeft )
dequeTreeNode.push_back( Node->pLeft );
if( Node->pRight )
dequeTreeNode.push_back( Node->pRight );
}
}