zoukankan      html  css  js  c++  java
  • 树————二叉树的层次遍历(2)

    方法:

    总体思想:
    用队列实现对树的遍历。
    两层代码块:
      1、将每一层的节点放入到队列中
      2、然后对这一层的节点进行遍历,将这些节点放入到temp临时变量中
        遍历的过程中,将每一个节点删除pop,并且将下一层的节点放入到队列中
      3、遍历完将temp添加到res中,同时检查队列是否为空,直到空的时候,完成遍历,返回res

     1 * Definition for a binary tree node.
     2  * struct TreeNode {
     3  *     int val;
     4  *     TreeNode *left;
     5  *     TreeNode *right;
     6  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     7  * };
     8  */
     9 class Solution 
    10 {
    11 public:
    12     vector<vector<int>> levelOrderBottom(TreeNode* root) 
    13     {
    14         vector<vector<int>> res;//结果
    15         if(root==NULL) 
    16             return res;
    17         
    18         queue<TreeNode*> q;//定义一个队列,用来放树
    19         q.push(root);//先把整棵树放进去,这个队列后面一直在补充子节点,
    20         {
    21             vector<int> temp;//放每一层的节点
    22             int len = q.size();//len是每一层的节点数,因为这个队列会一直向后面补充节点,所以设为定值,这样当前层的节点数遍历完了之后,就继续下一层
    23             for(int i=0;i<len;i++)
    24             {
    25                 TreeNode* now = q.front();//获取队列的第一个节点
    26                 q.pop();//弹出
    27                 temp.push_back(now->val);//将这个节点放入到temp
    28                 if(now->left!=NULL) q.push(now->left);//然后看这个节点左右子节点是否存在,存在的话放进去
    29                 if(now->right!=NULL) q.push(now->right);
    30             }//这个for循环完了之后,不仅放这一层的所有节点都放进temp,而且,也把这些节点pop出去了,而且,也把这一层的每一个节点的左右子节点都放入到了队列中,也就是将当前层的节点pop,下一层的所有节点都放进去了
    31             res.insert(res.begin(), temp);//将临时变量保存到结果中(从前面插入)
    32         }
    33         return res;
    34     }
    35 };
  • 相关阅读:
    hdu 1301 prime算法
    hdu 4763 kmp算法
    linux上安装程序出现的问题汇总
    linux之下载工具wget
    python之os模块
    管道和xargs的区别
    linux下查找文件或目录(which,whereis,locate,find)
    blast+学习之search tools
    linux的文件,目录操作命令(mv,rm,cp)
    PHPCMS V9 简单的二次开发
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11063544.html
Copyright © 2011-2022 走看看