当前位置:   article > 正文

(LeetCode C++)二叉树的层序遍历_输出对应二叉树的层次遍历

输出对应二叉树的层次遍历

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

示例 1:

  1. 输入:root = [3,9,20,null,null,15,7]
  2. 输出:[[3],[9,20],[15,7]]

示例 2:

  1. 输入:root = [1]
  2. 输出:[[1]]

示例 3:

  1. 输入:root = []
  2. 输出:[]

提示:

  1. 树中节点数目在范围 [0, 2000] 内
  2. -1000 <= Node.val <= 1000

Method:

利用队列先进先出的性质,对给定的二叉树进行层序遍历

Code:

  1. class Solution{
  2. public:
  3. // 二叉树的层序遍历
  4. vector<vector<int>> levelOrder(TreeNode *root){
  5. // 利用队列先进先出的性质
  6. queue<TreeNode *> temp;
  7. // 二维数组记录最终的结果
  8. vector<vector<int>> result;
  9. // 临时保存队头节点
  10. TreeNode *temp_node;
  11. // 记录一层的节点数量
  12. int count=0;
  13. // 如果根节点为空
  14. if(root==nullptr){
  15. // 则该树为一个空树
  16. // 返回空数组
  17. return result;
  18. }
  19. else{
  20. // 如果根节点不为空
  21. // 将根节点入队
  22. temp.push(root);
  23. }
  24. // 如果队列不为空
  25. // 则保持循环
  26. while(!temp.empty()){
  27. // 记录当前一层的节点
  28. vector<int> temp_layer;
  29. // 记录当前一层的节点数量
  30. // 即每次while循环开始时
  31. // 队列中的节点就是当前一层的所有节点
  32. count=temp.size();
  33. // 依次取出一层的每个节点
  34. for(int i=0;i<count;i++){
  35. // 保存队首节点
  36. temp_node=temp.front();
  37. // 弹出队首节点
  38. temp.pop();
  39. // 记录队首节点的值
  40. temp_layer.push_back(temp_node->val);
  41. // 如果该节点有左孩子
  42. if(temp_node->left!=nullptr){
  43. // 左孩子进队
  44. temp.push(temp_node->left);
  45. }
  46. // 如果该节点有右孩子
  47. if(temp_node->right!=nullptr){
  48. // 右孩子进队
  49. temp.push(temp_node->right);
  50. }
  51. }
  52. // 将记录的该层节点保存到结果二维数组中
  53. result.push_back(temp_layer);
  54. }
  55. // 返回结果二维数组
  56. return result;
  57. }
  58. };

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-level-order-traversal

 

 

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

闽ICP备14008679号