博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指offer》-逐层打印二叉树
阅读量:4651 次
发布时间:2019-06-09

本文共 2366 字,大约阅读时间需要 7 分钟。

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

乍一看就是一个BFS,但是因为太久没刷题都忘记了要使用queue来作为空间存储容器了。

先参考milolip的代码,写出这样的solution:

class Solution {public:    vector
> Print(TreeNode* pRoot) { vector
> res; if(pRoot==NULL){ return res; } queue
Q; Q.push(pRoot); Q.push(NULL); vector
v; v.push_back(pRoot->val); res.push_back(v); v.clear(); while (!Q.empty()){ TreeNode* node = Q.front(); Q.pop(); if (node != NULL){ //v.push_back(node->val); //cout << node->val << ends; if (node->left){ Q.push(node->left); v.push_back(node->left->val); } if (node->right){ Q.push(node->right); v.push_back(node->right->val); } } else if (!Q.empty()){ //cout << "test " << endl; Q.push(NULL); res.push_back(v); v.clear(); //cout << endl; } } return res; }};

上面的代码并不太简洁的样子。

另一种写法是从评论区copy来的,又简洁,又非常直观清晰。两层while的嵌套,正好对应到数的层次遍历以及层内逐点遍历。而这种双层嵌套的循环其实并没有增加复杂度,和原来的复杂度是一样的。

class Solution_11 {public:    vector
> Print(TreeNode* pRoot) { vector
> res; if (pRoot == NULL){ return res; } queue
q; q.push(pRoot); while (!q.empty()){ int lo = 0, hi = q.size(); vector
v; while (lo++ < hi){ TreeNode *t = q.front(); q.pop(); v.push_back(t->val); if (t->left){ q.push(t->left); } if (t->right){ q.push(t->right); } } res.push_back(v); } return res; }};

测试代码;

void main_solution_11(){    Solution_11 s = Solution_11();    TreeNode* a = new TreeNode(8);    TreeNode* b1 = new TreeNode(6);    TreeNode* b2 = new TreeNode(10);    TreeNode* c1 = new TreeNode(5);    TreeNode* c2 = new TreeNode(7);    TreeNode* c3 = new TreeNode(9);    TreeNode* c4 = new TreeNode(1);    a->left = b1;    a->right = b2;    b1->left = c1;    b1->right = c2;    b2->left = c3;    b2->right = c4;    vector
> q = s.Print(a); for (int i = 0; i < q.size(); i++){ for (int j = 0; j < q[i].size(); j++){ if (j > 0){ cout << " "; } cout << q[i][j]; } cout << endl; }}int main(){ main_solution_11(); return 0;}

转载于:https://www.cnblogs.com/zjutzz/p/6503544.html

你可能感兴趣的文章
初学Python
查看>>
rman 脚本备份全过程
查看>>
图像处理笔记(十八):模板匹配
查看>>
Educational Codeforces Round 60 D. Magic Gems
查看>>
vue搭建后可以改下全局配置
查看>>
【Docker】Segmentation Fault or Critical Error encountered. Dumping core and abort
查看>>
字典树从第i个构造HDU2846
查看>>
SQL优化笔记(二)—CPU优化
查看>>
bzoj 1042 HAOI2008 硬币购物
查看>>
JS 心得总结
查看>>
WINDOWS 下安装boost
查看>>
Log4j(1)--hellloworld
查看>>
java中equals和 == 的区别
查看>>
greenDao 3.0基础
查看>>
CSS自学笔记(15):CSS3多列布局
查看>>
Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作...
查看>>
好吧,如果一定要RESTFUL的DJANGO
查看>>
Java类的执行顺序
查看>>
Why ngx-uploader doesn't like to cooperate with .net core 2.x?
查看>>
iOS-Senior20-Map定位
查看>>