牛客网&剑指Offer&从上往下打印二叉树
代码实现
/*
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) {
std::deque<TreeNode *> dequeTreeNode; //定义一个TreeNode *类型的队列
dequeTreeNode.push_back(root);//将头节点储存在队列的首位
vector<int> vec; //定义数组储存从上往下打印的数据
if(root == NULL)
return vec;
while(dequeTreeNode.size())
{
TreeNode *pNode = dequeTreeNode.front();//返回*dequeTreeNode.begin()(第一个元素)
dequeTreeNode.pop_front(); //删除队列的第一个元素
vec.push_back(pNode->val);//将节点数值储存按顺序储存在数组
if(pNode->left)
dequeTreeNode.push_back(pNode->left); //将同层的左侧树节点数据依次储存在队列尾部
if(pNode->right)
dequeTreeNode.push_back(pNode->right);//将同层的右侧树节点数据依次储存在队列尾部
}
return vec;
}
};
编程笔记
- 代码实现解题思路:1.使用队列dequeTreeNode作为容器储存遍历的节点;2.将节点的数据依次储存在vec数组中,如果该节点有子节点,则把该节点的子节点放到队列dequeTreeNode的末尾;3.在队列的头部取出最早进入队列的节点,重复操作2直至队列中所有数据都储存在数组vec中。
- 熟悉STL容器与相应的标准模板库以及相关概念。