剑指offer(二十二)——从上往下打印二叉树,层次遍历
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
问题分析:
对于二叉树
其层次遍历打印序列为:字母下面表示层数
我们可以发现 第i个节点的左右子树在第2*i和第2*1+1的位置。
第一层: 节点A
第二层:节点A的左右
第三层: 节点A的左的左右 节点A的右的左右
第四层: 节点A的左的左的左右
打印流程可以用一个队列表示,每打印一个节点入队该节点的左右孩子。
附上代码:注意上的访问队首元素,在本题中是插入到输出数组中。
/* 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> list; queue<TreeNode*> que; if(root == nullptr) { return list; } //1。入首节点 que.push(root); while(!que.empty()) { list.push_back(que.front()->val); if(que.front()->left != nullptr) que.push(que.front()->left); if(que.front()->right != nullptr) que.push(que.front()->right); que.pop(); } return list; } };