有关剑指offer题目的解析:剑指offer 题目整理
题目要求
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 如
给定一个二叉树 [3,9,20,null,null,15,7],
8
/ \
6 10
/ \ / \
5 7 15 7
输出: 8,6,10,5,7,15,7
解题思路
实际上本题需要我们掌握的是二叉树的层序遍历。
对于树或者图中的层序遍历,我们需要借助队列这个结构来实现。首先把起始节点(对树而言是根节点)放入队列。接下来每次从队列的头部取出一个结点,遍历这个节点之后把它的子节点依次放入队列,重复这个遍历过程,直到队列中的节点全部遍历为止。
主要代码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) {
if(root==nullptr) return {}; // 确保输入合法!
vector<int>res;
queue<TreeNode*>q;
q.push(root);
while(!q.empty())
{
int size = q.size(); // 每层的元素个数
for(int i = 0; i< size; ++i)
{
TreeNode* tmp = q.front();
q.pop();
res.push_back(tmp->val);
if(tmp->left) q.push(tmp->left); // 依次放入子节点
if(tmp->right) q.push(tmp->right);
}
}
return res;
}
};
相似题目:
【剑指offer】面试题32(2) 把二叉树打印成多行
【剑指offer】面试题32(3) 按之字形顺序打印二叉树
解答:leetcode102 Binary Tree Level Order Traversal(二叉树的层序遍历)
解答:leetcode107 Binary Tree Level Order Traversal 2 (二叉树的层序遍历2)
解答:leetcode429 N-ary Tree Level Order Traversal(N叉树的层序遍历)