【题解】【BT】【Leetcode】Binary Tree Level Order Traversal
2024-08-24 12:18:13
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
思路:
重点在于每层元素个数不定,如何标记一层的结束,往堆栈里push很多NULL来表示空位这种方案,会造成Memory Limit Exceeded。
可以采取记下每层的NULL数量,下层翻倍这种方式计数,满额push标记NULL作为一层的结束
代码:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > orders;
if(root == NULL)
return orders; vector<int> vtmp;
queue<TreeNode*> tque;
tque.push(root);
tque.push(NULL); int size = ;
int count = ;
int zero = ;//该层的NULL数
while(!tque.empty()){
TreeNode * tmp = tque.front();//$$$$
tque.pop();//void pop() if(tmp == NULL){//NULL标识一层的结束
if(!vtmp.empty())//最后一行可能不满
orders.push_back(vtmp);
vtmp.clear();
continue;
}
vtmp.push_back(tmp->val);
if(tmp->left != NULL){
tque.push(tmp->left);
count++;
}
else
zero++;
if(tmp->right != NULL){
tque.push(tmp->right);
count++;
}
else
zero++; if(count + zero == size){
tque.push(NULL);
count = ;
size *= ;
zero = zero * ;
}
}
return orders;
}
最新文章
- Linux服务器安全登录设置记录
- 移动端web开发技巧
- java中Object.equals()简单用法
- windows 2003服务器网络异常流量的处理办法
- Segment Tree Build I &; II
- 安装DirectX SDK (June 2010) 失败(Error Code S1023)(转)
- m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
- sqlserver中的rowversion
- ASP.NET MVC应用程序把文字写在图片上
- 淘淘商城_day06_课堂笔记
- bzoj1798 [Ahoi2009]维护序列
- 数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程
- datatables里面的search怎么去掉?
- 初识gauge自动化测试框架(二)
- KMeams算法应用:图片压缩与贝叶斯公式理解
- 深度优先遍历(DFS)(转)
- 多线程-interrupt(),isInterrupted(),interrupted()(转)
- 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)
- MySQL单行注释和多行释
- UPDATE语句中SET部分列赋值的先后顺序有影响么?