当前位置: 代码迷 >> 综合 >> 剑指offer - 22 -- 从上往下打印二叉树 -- C++
  详细解决方案

剑指offer - 22 -- 从上往下打印二叉树 -- C++

热度:44   发布时间:2024-02-21 05:10:58.0

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

方法:层次遍历

这道题就是一个模板题,对队列的使用。因为要满足先进先出的特性。

  1. 初始化:一个队列queue<TreeNode*> q, 将root节点入队列q
  2. 如果队列不空,做如下操作:
  3. 弹出队列头,保存为node,将node的左右非空孩子加入队列
  4. 做2,3步骤,直到队列为空

如果不需要确定当前遍历到了哪一层,模板如下:

void bfs() {vis[] = 0;queue<int> pq(start_val);while (!pq.empty()) {int cur = pq.front(); pq.pop();for (遍历cur所有的相邻节点nex) {if (nex节点有效 && vis[nex]==0){vis[nex] = 1;pq.push(nex)}}}
}

如果需要确定遍历到哪一层,模板如下:

void bfs() {int level = 0;vis[] = 0; // or setqueue<int> pq(original_val);while (!pq.empty()) {int sz = pq.size();while (sz--) {int cur = pq.front(); pq.pop();for (遍历cur所有的相邻节点nex) {if (nex节点有效 && vis[nex] == 0) {vis[nex] = 1;pq.push(nex)}} // end for} // end inner whilelevel++;} // end outer while
}

所以本题直接套用模板即可

class Solution {
public:vector<int> PrintFromTopToBottom(TreeNode* root) {vector<int> ret;if(!root)return ret;queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode *node = q.front();q.pop();ret.push_back(node->val);if(node->left)q.push(node->left);if(node->right)q.push(node->right);}return ret;}
};

 

  相关解决方案