题目:从上而下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印。二叉树结点定义如下:
struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }
分析:就是二叉树的按层遍历,即广度优先遍历。利用队列进行编程。每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部去除最早放入队列的结点,重复前面的操作,直至队列中所有节点都被打印出来为止。
实现如下:
void PrintFromTopToBottom(BinaryTreeNode* pTreeRoot) { if(!pTreeRoot) return; std::deque<BinaryTreeNode *>dequeTreeNode; dequeTreeNode.push_back(pTreeRoot); while(dequeTreeNode.size()) { BinaryTreeNode *pNode=dequeTreeNode.front(); dequeTreeNode.pop_front(); printf("%d",pNode-m_nValue); if(pNode->m_pLeft) dequeTreeNode.push_back(pNode->m_pLeft); if(pNode->m_pRight) dequeTreeNode.push_back(pNode->mpRight); } }
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1585197
原文地址:http://secondscript.blog.51cto.com/9370042/1585197