题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
1、引入一个数据容器即队列deque
STL实现了一个很好的deque(两端都可以进出的队列)
2、每次打印一个结点的时候,如果该节点有子节点,则把该子节点放到一个队列的末尾。
/*
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)
{
//用容器保存打印出来的值
vector<int>res;
//特殊情况判断
if(root==NULL)
return res;
deque<TreeNode*>dequeTreeNode;//队列deque
dequeTreeNode.push_back(root);//将根节点入队列
while(dequeTreeNode.size()>0)
{
//定义指针pNode指向队列首元素,取出,弹出
TreeNode*pNode=dequeTreeNode.front();
dequeTreeNode.pop_front();
res.push_back(pNode->val); //放入容器中打印出来
if(pNode->left)
dequeTreeNode.push_back(pNode->left);
if(pNode->right)
dequeTreeNode.push_back(pNode->right);
}
return res;
}
};