二叉树层次遍历-LintCode
2017-06-26 19:21
453 查看
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
给一棵二叉树 {3,9,20,#,#,15,7}
遍历结果:
[
[3],
[9,20],
[15,7]
]
主要思想:
为了层次遍历,就要一层一层地处理数据。先将根节点入队,之后搜寻其左子树与右子树,若非空,则入队,并将根节点出队。按照此方法,依此处理。
得到结果:
给一棵二叉树 {3,9,20,#,#,15,7}
遍历结果:
[
[3],
[9,20],
[15,7]
]
主要思想:
为了层次遍历,就要一层一层地处理数据。先将根节点入队,之后搜寻其左子树与右子树,若非空,则入队,并将根节点出队。按照此方法,依此处理。
#ifndef C69_H #define C69_H #include<iostream> #include<vector> #include<queue> using namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; } }; class Solution { public: vector<vector<int>> levelOrder(TreeNode *root) { // write your code here vector<vector<int>> v; queue<TreeNode*> Q;//构建队列Q,元素为TreeNode if (root == NULL) return v; Q.push(root); while (!Q.empty()) { int size = Q.size();//保证结点处于同一层次 vector<int> val; for (int i = 0; i < size; ++i) { TreeNode *head = Q.front();//取队首元素 Q.pop(); //元素出队 val.push_back(head->val);//将head的值压入val中 if (head->left != NULL) //head左子树不为空,将其左子树入队 Q.push(head->left); if (head->right != NULL)//head右子树不为空,将其右子树入队 Q.push(head->right); } v.push_back(val); } return v; } }; #endif
得到结果:
相关文章推荐
- LintCode 二叉树的层次遍历
- Lintcode 二叉树的锯齿形层次遍历
- LintCode-二叉树的层次遍历
- LintCode 二叉树的层次遍历 II
- LintCode 二叉树的前序,中序,后序,层次遍历
- LintCode 二叉树的层次遍历
- [Lintcode] #70 二叉树的层次遍历 II
- 【LintCode-69】二叉树的层次遍历(Java实现)
- lintcode-二叉树的层次遍历-69
- lintcode : 二叉树的层次遍历II
- Lintcode---二叉树的层次遍历
- Lintcode---二叉树的层次遍历(原型)
- 二叉树的层次遍历-LintCode
- LintCode-剑指Offer-(71)二叉树的锯齿形层次遍历
- LintCode 69-二叉树的层次遍历
- lintcode: 二叉树的锯齿形层次遍历
- LintCode 69 二叉树的层次遍历
- lintcode-二叉树的层次遍历II-70
- LintCode笔记(4)——二叉树的层次遍历II
- [Lintcode]Binary Tree Level Order Traversal II 二叉树的层次遍历 II