http://oj.leetcode.com/problems/binary-tree-level-order-traversal/

树的层序遍历,使用队列

由于树不是满的,还要分出每一层来,刚开始给缺少的节点用dummy节点代替,结果超时了。

vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > ans;
if(root == NULL)
return ans;
int num = ,num2 = ;
queue<TreeNode *> myQueue;
myQueue.push(root);
TreeNode *nodeFront;
TreeNode *dummy = new TreeNode(-); vector<int> onePiece;
while(!myQueue.empty())
{
nodeFront = myQueue.front();
myQueue.pop();
num--;
if(nodeFront != dummy)
{
onePiece.push_back(nodeFront->val);
if(nodeFront->left)
myQueue.push(nodeFront->left);
else
myQueue.push(dummy);
if(nodeFront->right)
myQueue.push(nodeFront->right);
else
myQueue.push(dummy);
}
else
{
myQueue.push(dummy);
myQueue.push(dummy);
} if(num == )
{
if(onePiece.empty())
break;
ans.push_back(onePiece);
onePiece.clear();
num2 = num2*;
num = num2;
}
}
return ans;
}

改进的话,对缺失的节点进行计数,则计算出下一层应该有多少个节点来,如下。

    vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > ans;
if(root == NULL)
return ans;
int num = ,num2 = ,nullNum = ,nullNumAcc = ;
queue<TreeNode *> myQueue;
myQueue.push(root);
TreeNode *nodeFront; vector<int> onePiece;
while(!myQueue.empty())
{
nodeFront = myQueue.front();
myQueue.pop();
num--; onePiece.push_back(nodeFront->val);
if(nodeFront->left)
myQueue.push(nodeFront->left);
else
nullNum++;
if(nodeFront->right)
myQueue.push(nodeFront->right);
else
nullNum++; if(num == )
{
if(onePiece.empty())
break;
ans.push_back(onePiece);
onePiece.clear();
num2 = num2*;
nullNumAcc = nullNumAcc* + nullNum;
num = num2 - nullNumAcc;
nullNum = ;
}
}
return ans;
}

最新文章

  1. 聊天气泡 button backgroundImage uiimage 拉伸 stretchableImageWithLeftCapWidth: 方法的使用
  2. 理解python的with语句
  3. ios 中直接修改frame里边某个属性的简便方法
  4. C#后台如何获取客户端访问系统型号
  5. Nginx安装注意事项
  6. AndroidManifest.xml
  7. 洛谷P2015 二叉苹果树
  8. Progress 自定义(一)-shape
  9. Ubuntu远程桌面xrdp方法
  10. Cocos2d-x 3.1.1 学习日志9--一“上一下其乐无穷”游戏开发系列一
  11. top -Hp pid 显示所有的线程
  12. paip.oracle10g dmp文件导入总结
  13. iOS开发实战-时光记账Demo 本地数据库版
  14. ZoomCharts
  15. MySQL的binlog及关闭方法
  16. 使用htpasswd及nginx auth模块对指定页面进行登录验证
  17. -webkit-line-clamp、-webkit-box-orient vue 打包部署后不起作用??
  18. 二: drf视图
  19. (一 ) 天猫精灵接入Home Assistant-服务器搭建
  20. Metaspace 之一:Metaspace整体介绍(永久代被替换原因、元空间特点、元空间内存查看分析方法)

热门文章

  1. 【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair
  2. SSH框架面试总结----1
  3. paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 FSM Coding Goals
  4. Linux 安装Nginx+PHP+MySQL教程
  5. Python3爬虫一之(urllib库)
  6. LeetCode(292) Nim Game
  7. seleniumIDE使用
  8. python-网络编程-02
  9. TensorFlow TFRecord封装不定长的序列数据(文本)
  10. 【bzoj2625】[Neerc2009]Inspection 有上下界最小流