二叉树的层次遍历
来源:互联网 发布:win10磁盘优化有什么用 编辑:程序博客网 时间:2024/06/07 12:09
1、问题描述
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。给一棵二叉树 {3,9,20,#,#,15,7}
:
3 / \9 20 / \ 15 7
返回他的分层遍历结果:
[ [3], [9,20], [15,7]]
2、实现思路
由于二叉树是从左至右进行输入,故层次遍历通过队列存储每层的结点,它存储的顺序也是前一个结点的左孩子结点、右孩子结点,依次顺序进出队列。具体操作在代码后有注释。
3、代码
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public:
vector<vector<int>> levelOrder(TreeNode *root) {
// write your code here
vector<vector<int>> a; //多维向量,2维容器
if(root==NULL) return a;
queue<TreeNode*>q; //建立一个以TreeNode这个数据类型为节点的队列,队列的变量为q
q.push(root) ; //该函数将一个新的元素加到最后面,位置为当前最后一个元素的下一个元素
while(q.empty()==0){ //判断队列空,如q.empty(),当队列空时,返回true。
vector<int> b; //每层结果
int size,i;
size=q.size(); //q.size()访问队列中的元素个数
for(i=0;i<size;i++){
TreeNode *t=new TreeNode;
t=q.front(); //访问队首元素,q.front(),即最早被压入队列的元素。
q.pop(); //出队,q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
b.push_back(t->val);
if(t->left!=NULL)
q.push(t->left); //入队,q.push(x); 将x 接到队列的末端。依次压入左右结点元素
if(t->right!=NULL)
q.push(t->right);
}
a.push_back(b); //添加每层数据
}
return a;
}
};
4、感想
使用队列先进先出,用到的函数:
queue<int> q 定义队列
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队列尾元素的值,但不删除该元素
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历!!!
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- EasyUI databox清除不了input属性value的问题
- 欢迎使用CSDN-markdown编辑器
- JavaWeb应用的目录结构
- SpringAOP实现读写分离
- Problem 1019 猫捉老鼠
- 二叉树的层次遍历
- POJ3662,洛谷1948 [USACO08JAN]电话线Telephone Lines
- 从相册选择图片
- MongoDB Windows环境安装及配置
- 二分查找-JAVA
- 学习笔记_虚函数表
- 小虎解读2017年最新的计算机专业技术人才职称评定国家政策
- 响应式布局,宽度自适应
- C++中new和delete的使用.c