当前位置:   article > 正文

【Leetcode】102.二叉树的层序遍历 | Medium | Tree | BFS_medium tree

medium tree

题目

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

示例:
二叉树:[3,9,20,null,null,15,7],

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

返回其层序遍历结果:

  1. [
  2. [3],
  3. [9,20],
  4. [15,7]
  5. ]

知识点

C++中的队列queue

基本用法:(这部分转载自https://blog.csdn.net/lady_killer9/article/details/79261798

queue 和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同:

  • front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
  • push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
  • pop():删除 queue 中的第一个元素。
  • size():返回 queue 中元素的个数。
  • empty():如果 queue 中没有元素的话,返回 true。
  • emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
  • swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

代码

bfs,AC

  1. class Solution
  2. {
  3. public:
  4. vector<vector<int>> levelOrder(TreeNode *root)
  5. {
  6. vector<vector<int>> ans;
  7. vector<int> curr;
  8. if (root == nullptr)
  9. {
  10. return ans;
  11. }
  12. queue<TreeNode *> q;
  13. q.push(root);
  14. int cnt = 1;
  15. while (!q.empty())
  16. {
  17. int cnt_new = 0;
  18. for (int i = 0; i < cnt; i++)
  19. {
  20. TreeNode *temp = q.front();
  21. curr.push_back(temp->val);
  22. q.pop();
  23. if (temp->left != nullptr)
  24. {
  25. q.push(temp->left);
  26. cnt_new++;
  27. }
  28. if (temp->right != nullptr)
  29. {
  30. q.push(temp->right);
  31. cnt_new++;
  32. }
  33. }
  34. ans.push_back(curr);
  35. curr.clear();
  36. cnt = cnt_new;
  37. }
  38. return ans;
  39. }
  40. };

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/274914
推荐阅读
相关标签
  

闽ICP备14008679号