《剑指offer》-逐层打印二叉树
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
乍一看就是一个BFS,但是因为太久没刷题都忘记了要使用queue来作为空间存储容器了。
先参考milolip的代码,写出这样的solution:
class Solution {
public:vector<vector<int> > Print(TreeNode* pRoot) {vector<vector<int> > res;if(pRoot==NULL){return res;}queue<TreeNode*> Q;Q.push(pRoot);Q.push(NULL);vector<int> 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<vector<int> > Print(TreeNode* pRoot) {vector<vector<int> > res;if (pRoot == NULL){return res;}queue<TreeNode*> q;q.push(pRoot);while (!q.empty()){int lo = 0, hi = q.size();vector<int> 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<vector<int> > 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;
}
《剑指offer》-逐层打印二叉树相关推荐
- 【LeetCode】剑指 Offer 37. 序列化二叉树
[LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...
- 【LeetCode】剑指 Offer 07. 重建二叉树
[LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 【LeetCode】剑指 Offer 55 - I. 二叉树的深度
[LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...
- 【LeetCode】剑指 Offer 17. 打印从1到最大的n位数
[LeetCode]剑指 Offer 17. 打印从1到最大的n位数 文章目录 [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 一.大数 一.大数 将 1~9 加入队列 对队列中 ...
- 剑指 Offer II 044. 二叉树每层的最大值
链接:剑指 Offer II 044. 二叉树每层的最大值 题解: /*** Definition for a binary tree node.* struct TreeNode {* int va ...
- 【剑指 Offe】剑指 Offer 17. 打印从1到最大的n位数
目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...
- [剑指offer]顺时针打印矩阵
[剑指offer]顺时针打印矩阵 剑指offer-顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4, ...
- 剑指 Offer II 047. 二叉树剪枝
剑指 Offer II 047. 二叉树剪枝: 题目链接 :剑指 Offer II 047. 二叉树剪枝 题目: 给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1.请剪除该二 ...
- 剑指Offer #04 重建二叉树(递归)
题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...
最新文章
- CES 2019开胃菜竟然是芯片,英特尔 英伟达 高通 华为 AMD已经开打!
- shell编程:定义简单标准命令集
- @Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
- 微信js sdk 分享 失败 有时候好 有时候坏
- PS比狠大赛!看看谁家的照片更丑!
- python怎么输出结果_Python中print()常用输出方法
- MariaDB强势席卷DB-Engines榜单后续,与阿里云达成全球独家战略合作
- ae中心点重置工具_如何使用AE制作文字破碎动画?制作ae破碎文字特效教程分享...
- C++ container member map
- github 如何 只下载 一个项目中的 部分 代码文件
- SoapUI使用教程
- html 滑动门效果,js实现简洁的滑动门菜单(选项卡)效果代码
- QGIS安装以及使用教程
- dede文章采集管理php,DEDECMSV5.7最新自动采集伪原创插件
- uniapp点击复制文本
- QT for Android串口开发
- wannier插值能带拟合2
- Android 实现指南针效果
- 个人网站申请域名怎么做?做网站申请域名多少钱?
- PiXYZ Studio教程