当前位置:   article > 正文

【LeetCode】102.二叉树的层次遍历 (C++)_102. 二叉树的层次遍历(c++)

102. 二叉树的层次遍历(c++)

题目地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

题目描述:

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

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

使用队列进行层次遍历:

因为本题不光要层次遍历,且最后的结果需要分层保存(即每层结点保存在一个vector里),所以需要一个depth记录目前是第几层,一个cout记录该层有几个节点,然后利用队列先进先出,逐个遍历所有节点。

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. vector<vector<int>> levelOrder(TreeNode* root) {
  13. if(root==nullptr)return vector<vector<int>>{};
  14. queue<TreeNode*> data;
  15. vector<vector<int>> res;
  16. data.push(root);
  17. int depth=0;
  18. while(!data.empty()){
  19. res.push_back(vector<int> {});//开辟第几层的存储空间
  20. int cout = data.size();//第几层有cout个节点
  21. while(cout--){//遍历第几层
  22. res[depth].push_back(root->val);
  23. if(root->left != nullptr)data.push(root->left);
  24. if(root->right != nullptr)data.push(root->right);
  25. data.pop();
  26. if(!data.empty())root = data.front();
  27. }
  28. depth += 1;//层数加1
  29. }
  30. return res;
  31. }
  32. };

递归前序遍历:(参考leetcode评论)

  • 利用depth变量记录当前在第几层(从0开始),进入下层时depth + 1
  • 如果depth >= vector.size()说明这一层还没来过,这是第一次来,所以得扩容咯;
  • 因为是前序遍历,中-左-右,对于每一层来说,左边的肯定比右边先被遍历到,实际上后序中序都是一样的
  1. class Solution {
  2. public:
  3. vector<vector<int>> levelOrder(TreeNode* root) {
  4. vector<vector<int>> ans;
  5. pre(root, 0, ans);
  6. return ans;
  7. }
  8. void pre(TreeNode *root, int depth, vector<vector<int>> &ans) {
  9. if (!root) return ;//void
  10. if (depth >= ans.size())
  11. ans.push_back(vector<int> {});
  12. ans[depth].push_back(root->val);
  13. pre(root->left, depth + 1, ans);
  14. pre(root->right, depth + 1, ans);
  15. }
  16. };

 

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

闽ICP备14008679号