【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

简介: 102. 二叉树的层序遍历102. 二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点) 示例:

作者:小卢

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


102. 二叉树的层序遍历

102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)

示例:

思路:

我们这里利用一个队列q和levelsize(代表当前层数据的个数)

一开始我们先压入一个数值到q,并且levelsize为1,当q不为空会时,我们循环levesize次,每次取队头,取完后再判断取的元素有没有左右节点,有的话就压入,然后结束循环的时候更新levelsize

代码:

1. class Solution {
2. public:
3.     vector<vector<int>> levelOrder(TreeNode* root) {
4.         queue<TreeNode*>q;
5. int levelsize=0;
6. if(root)
7.         {
8.             q.push(root);
9.             levelsize=1;
10.         }
11.         vector<vector<int>>vv;
12. while(!q.empty())
13.         {
14.             vector<int>v;
15. while(levelsize--)
16.             {
17.                 TreeNode*front=q.front();
18.                 q.pop();
19.                 v.push_back(front->val);
20. if(front->left)
21.                 {
22.                     q.push(front->left);
23.                 }
24. if(front->right)
25.                 {
26.                     q.push(front->right);
27.                 }
28.             }
29.             levelsize=q.size();
30.             vv.push_back(v);
31.         }
32. return vv;
33.     }
34. };

107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II

题目:

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例:

思路:

和上题一样,就结尾多一个逆置。

代码:

1. class Solution {
2. public:
3.     vector<vector<int>> levelOrderBottom(TreeNode* root) {
4.         queue<TreeNode*>q;
5. int levelsize = 0;
6. if (root)
7.         {
8.             q.push(root);
9.             levelsize = 1;
10.         }
11.         vector<vector<int>>vv;
12. while (!q.empty())
13.         {
14.             vector<int>v;
15. while (levelsize--)
16.             {
17.                 TreeNode* front = q.front();
18.                 q.pop();
19.                 v.push_back(front->val);
20. if (front->left)
21.                 {
22.                     q.push(front->left);
23.                 }
24. if (front->right)
25.                 {
26.                     q.push(front->right);
27.                 }
28.             }
29.             levelsize = q.size();
30.             vv.push_back(v);
31.         }
32. reverse(vv.begin(),vv.end());
33. return vv;
34.     }
35. };


相关文章
|
1月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
19 2
|
1月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
15 2
|
1月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
15 2
|
1月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
18 0
|
1月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
14 0
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
16 0
|
1月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
12 0
|
1月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
16 0
|
3月前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
|
3月前
|
算法 Java
LeetCode第94题二叉树的中序遍历
文章介绍了LeetCode第94题"二叉树的中序遍历"的解法,使用递归实现了中序遍历的过程,遵循了"左根右"的遍历顺序,并提供了清晰的Java代码实现。
LeetCode第94题二叉树的中序遍历