Lintcode 二叉树的层次遍历
2017-08-18 15:06
260 查看
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
您在真实的面试中是否遇到过这个题? Yes
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
code:
您在真实的面试中是否遇到过这个题? Yes
样例
给一棵二叉树 {3,9,20,#,#,15,7} :
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
code:
class Solution{ public: vector< vector<int> > levelOrder(TreeNode *root) { vector< vector<int> > re; if(root == NULL){ return re; } queue<TreeNode*> que; //创建队列 que.push(root); //将根节点加入队列 int should_len = 1; //这一层应该有的节点数量 int null_len = 0; //这一层空节点的数量 vector<int> now_s; //缓存vector while(!que.empty()){ TreeNode *t = que.front(); que.pop(); if (t == NULL){ null_len ++; } else{ now_s.push_back(t->val); que.push(t->left); que.push(t->right); } if(should_len == null_len + now_s.size() //当达到某一层节点数量时(值的数量+空节点的数量==这层应该有的节点数) && now_s.size() != 0){ re.push_back(now_s); //将缓存vector存入结果re now_s.clear(); //清空缓存vector should_len *= 2; null_len *= 2; //下一层空节点数量将以这一层空节点数目的二倍开始计数 } } return re; } };
相关文章推荐
- Lintcode---二叉树的锯齿形层次遍历
- lintcode--二叉树的层次遍历
- lintcode 二叉树的层次遍历系列问题 -解决方法和领会
- LintCode:二叉树的层次遍历 II
- lintcode--二叉树的锯齿形层次遍历
- lintcode——二叉树的层次遍历
- lintcode&九章算法——No.70 二叉树的层次遍历(二) ? 待解决
- LintCode 二叉树的层次遍历
- LintCode:M-二叉树的锯齿形遍历
- lintcode--二叉树的后序遍历
- lintcode 容易题:Binary Tree Postorder Traversal 二叉树的后序遍历
- 二叉树专题-lintcode非递归遍历与总结
- LintCode:二叉树的前序遍历、中序遍历、后序遍历
- LintCode之66 二叉树的前序遍历
- 二叉树创建、前序遍历、中序遍历、后序遍历 的 递归与非递归实现 以及 层次遍历
- 二叉树的层次遍历
- 按照层次遍历二叉树
- 二、lintcode刷题记录--二叉树的路径和
- LeetCode: 102_Binary Tree Level Order Traversal | 二叉树自顶向下的层次遍历 | Easy
- 6_7 树的层次遍历(UVa122)<二叉树的动态创建与BFS>