目录
题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:剑指 Offer 32 - II. 从上到下打印二叉树 II - 力扣(Leetcode)
题目的接口:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
}
};
解题思路:
我们可以利用队列先进先出的特性,
用队列来存放二叉树节点,
然后每次遍历二叉树的一层节点,
每层遍历的时候用数组存起来,然后放进二维数组,
每层都用新的数组村节点值即可。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
//建一个队列
queue<TreeNode*> q;
TreeNode* cur = root;
int qsize = 0;
//先把根节点入队
if(root)
{
q.push(root);
qsize++;
}
vector<vector<int>> vv;
//循环到不再有节点入队
while(!q.empty())
{
//每次初始化新数组
vector<int> v;
//循环该层的节点数
while(qsize--)
{
//节点出队,节点值打印
TreeNode* front = q.front();
q.pop();
v.push_back(front->val);
//左右孩子入队
if(front->left)
{
q.push(front->left);
}
if(front->right)
{
q.push(front->right);
}
}
//该层的节点数
qsize = q.size();
vv.push_back(v);
}
return vv;
}
};
过啦!!!
题目:剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(Leetcode)
题目的接口:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
}
};
解题思路:
这道题其实是上一道题的一个变式练习,
整体框架和思路是一样的,
我们只需要根据题意,将双数层的数组反转再打印即可。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
//建一个队列
queue<TreeNode*> q;
TreeNode* cur = root;
int qsize = 0;
int cnt = 0;
//先把根节点入队
if(root)
{
q.push(root);
qsize++;
}
vector<vector<int>> vv;
//循环到不再有节点入队
while(!q.empty())
{
//每次初始化新数组
vector<int> v;
//记录层数
cnt++;
//循环该层的节点数
while(qsize--)
{
//节点出队,节点值打印
TreeNode* front = q.front();
q.pop();
v.push_back(front->val);
//左右孩子入队
if(front->left)
{
q.push(front->left);
}
if(front->right)
{
q.push(front->right);
}
}
//该层的节点数
qsize = q.size();
//层数为双数的时候反转一下数组就行
if(cnt % 2 == 0)
{
reverse(v.begin(), v.end());
}
vv.push_back(v);
}
return vv;
}
};
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。