1.问题描述
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
2.分析
其实这就是一个层次遍历,不是我们常见的前序,中序,后序遍历。
例如:
// 10
// / \
// 6 14
// /\ /\
// 4 8 12 16
- 这不是一个空的树,第一步,添加根节点到队列中,则队列元素为
10
- 如果队列不是空的,则访问节点10,打印出来,之后,添加左右不为空的节点
- 重复上一步
3.源代码:
vector<int> PrintFromTopToBottom(TreeNode* root)
{
vector<int> res;
if(root == NULL)
return res;
queue<TreeNode*> nodes;
nodes.push(root);
while(!nodes.empty())
{
TreeNode* node = nodes.front();
nodes.pop();
res.push_back(node->val);
if(node->left)
nodes.push(node->left);
if(node->right)
nodes.push(node->right);
}
return res;
}
4.结论:
其实这就是一个层次遍历,使用一个队列,可以很好的解决这个问题。