[剑指offer]面试题23:从上往下打印二叉树

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer]面试题23:从上往下打印二叉树相关的知识,希望对你有一定的参考价值。

面试题23:从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11。

二叉树结点的定义如下:

struct BinaryTreeNode
{
	int value;
	BinaryTreeNode *lchild;
	BinaryTreeNode *rchild;
};

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

代码如下:

void PrintFromTopToBottom(BinaryTreeNode *pTreeRoot)
{
	if (!pTreeRoot) return;
	deque<BinaryTreeNode *> dequeTreeNode;

	dequeTreeNode.push_back(pTreeRoot);

	while (dequeTreeNode.size())
	{
		BinaryTreeNode *pNode = dequeTreeNode.front();
		dequeTreeNode.pop_front();

		cout << pNode->value << " ";

		if (pNode->lchild) dequeTreeNode.push_back(pNode->lchild);

		if (pNode->rchild) dequeTreeNode.push_back(pNode->rchild);
	}
}

本题考点:
● 考查思维能力。按层从上到下遍历二叉树,这对很多应聘者是个新概念,要在短时间内想明白遍历的过程不是一件容易的事情。应聘者通过具体的例子找出其中的规律并想到基于队列的算法,是解决这个问题的关键所在。
● 考查应聘者对二叉树及队列的理解。

以上是关于[剑指offer]面试题23:从上往下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer对答如流系列 - 从上往下打印二叉树

《剑指offer》第三十二题I:不分行从上往下打印二叉树

剑指offer 23:从上往下打印二叉树

剑指offer---从上往下打印二叉树

剑指Offer:从上往下打印二叉树

剑指offer-从上往下打印二叉树