树————二叉树的层次遍历(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 };
原文地址:https://www.cnblogs.com/pacino12134/p/11063544.html