zoukankan      html  css  js  c++  java
  • (树)输出或者存储二叉树中每一行的节点值

    • 题目:https://www.nowcoder.com/practice/d8566e765c8142b78438c133822b5118?tpId=46&tqId=29071&tPage=3&rp=3&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
    • 思路:
      • 这个题目的主要思路就是利用队列来进行解决。从顶部到尾部,对每一层将每一层的节点放入队列中,然后在这一层中将队列中的每个节点保存在一个vector中,并且判断这个节点是否有左右子节点,将他们放入队列(这样就将下一层的所有节点放入了队列中),依次处理每一层。然后将每一层的vector'放入二维数组中即可。


    • 代码
      /**
       * Definition for binary tree
       * struct TreeNode {
       *     int val;
       *     TreeNode *left;
       *     TreeNode *right;
       *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
       * };
       */
      class Solution {
      public:
          vector<vector<int> > levelOrderBottom(TreeNode *root) {
              int depth = Depth(root);
              vector <vector<int> > bottom;
              if (root == NULL)
                  return bottom;
              
              deque <TreeNode *> dq;
              dq.push_back(root);
              /*
                  这里是利用队列来进行存储每一行的节点,进队列出队列,主要思路就是利用当前的遍历到当前节点,就讲它的左右子节点
                  进入队列,然后再将这一个队列的当前行的元素进入vector中然后在进入二维数组中
              */
              while (!dq.empty()){
                  int low = 0;
                  int high = dq.size();//计算当前队列中元素的个数,这个就是每一行的元素个数
                  vector<int> tmp;
                  while (low++ < high){
                      TreeNode *cur = dq.front();
                      dq.pop_front();
                      tmp.push_back(cur->val);
                      if (cur->left) dq.push_back(cur->left);
                      if (cur->right) dq.push_back(cur->right);
                  }
                  bottom.push_back(tmp);
              }
              reverse(bottom.begin(), bottom.end());//翻转函数,实现翻转
              return bottom;
          }
          //计算树的深度函数
          int Depth(TreeNode *root){
              if (root == NULL)
                  return 0;
              int left = left + Depth(root->left);
              int right = right + Depth(root->right);
              
              return left>right?left:right;
          }
      };
  • 相关阅读:
    关于图片去水印和转载
    多叉树(森林)转二叉树
    [置顶] 读入优化&输出优化
    【NOI OJ】1816 拨钟问题
    Splay树
    【AVL】宠物收养所
    【树状数组】Stars
    对拍
    使用Mybatis进行多表联查操作
    搜索框自动提示
  • 原文地址:https://www.cnblogs.com/Kobe10/p/6341279.html
Copyright © 2011-2022 走看看