1.问题描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
2.解题思路
①:问题分析
首先根据题目的意思,我们二叉树的打印顺序是(假设我们列举的结点都存在)
root->root的左子->root的右子->root的左子的左子->root的左子的右子->root的右子的左子....
实际上就是实现二叉树的层次遍历
②:解题步骤
Ⅰ:首先我们需要一个队列,先进先出的队列,首先让root结点入队。
Ⅱ:如果队列不空,执行出队,打印出队的结点,然后判断出队的左右结点是否为空。如果不为空,依次加入到队列里,重复执行
🌂:直到队列为空,遍历结束
3.c/c++源代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
queue<TreeNode *> m_queue;
vector<int> result_vec;
if(root == NULL)
return result_vec;
m_queue.push(root);
TreeNode* m_tempNode = NULL;
while(!m_queue.empty())
{
m_tempNode = m_queue.front();
m_queue.pop();
if(m_tempNode->left != NULL)
{
m_queue.push(m_tempNode->left);
}
if(m_tempNode->right != NULL)
{
m_queue.push(m_tempNode->right);
}
result_vec.push_back(m_tempNode->val);
}
return result_vec;
}
};
4.留言
CSDN:https://blog.csdn.net/qq_42714490
欢迎交流:
作者:有梦想的阿长
微信:hs835844948
【转载文章务必保留出处和署名,谢谢!】