22、从上往下打印二叉树 && 59、把二叉树打印成多行
来源:互联网 发布:淘宝一周可以买多少次 编辑:程序博客网 时间:2024/06/06 00:19
题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
时间限制:1秒 空间限制:32768K
有类似的想法,不过想到了遍历vector却没想到用队列,就把问题复杂化了,所以这道题还是借鉴了别人的方法。
思路:广度优先算法(BFS)
用一个队列放入还没有打印(放入结果容器)的节点,只要队列不为空,循环执行打印的过程,每次取队列最前面一个,同时删除队列里的这一个,将这个节点的值放入结果容器,并把这一节点的左右子节点放到队列后面。
需要注意的一点:放入左右子节点时,不需要判断子节点是否为空,因为如果是空,相当于把空指针放入队列,在取出后会判断,如果该节点为空就continue了。
代码:
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<int> PrintFromTopToBottom(TreeNode* root) { if(root==NULL) return vector<int>(); queue<TreeNode*> que; que.push(root); vector<int> res; while(!que.empty()){ root = que.front(); que.pop(); if(root==NULL) continue; res.push_back(root->val); que.push(root->left); que.push(root->right); } return res; }};
后面一道相似的问题,59 把二叉树打印成多行
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:乍一看是和上一题相同的题目,区别就是需要按层分行打印,那么用什么来表示该换行了呢?
可以定义两个变量,一个变量表示在当前层中还没有打印的节点数,另一个变量表示下一层节点的数目。
代码:
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > res; vector<int> temp; if(pRoot==NULL) return res; queue<TreeNode*> nodes; nodes.push(pRoot); int toBePrinted = 1;//本层还没打印的节点个数 int nextlevel = 0;//下一层节点个数 while(!nodes.empty()){ TreeNode* pNode = nodes.front(); nodes.pop(); toBePrinted--; temp.push_back(pNode->val); if(pNode->left!=NULL){ nodes.push(pNode->left); nextlevel++; } if(pNode->right!=NULL){ nodes.push(pNode->right); nextlevel++; } if(toBePrinted==0){//本层打印完了 res.push_back(temp); temp.clear(); toBePrinted = nextlevel;//开始打印下一层 nextlevel = 0;//清空下一层的节点数 } } return res; }};
阅读全文
1 0
- 22、从上往下打印二叉树 && 59、把二叉树打印成多行
- 从上往下打印二叉树
- 从上往下分层打印二叉树
- Q23:从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- 从上往下打印二叉树
- Linux系统下查看cpu、内存、进程、硬盘、网卡
- eclipse上传项目到github
- 逻辑回归、决策树和支持向量机(II)
- io流回顾
- 操作系统相关书单
- 22、从上往下打印二叉树 && 59、把二叉树打印成多行
- 非线性方程求解:孙悟空与贾宝玉的前世今生
- Hadoop进阶(hadoop streaming c++实现 & MapReduce参数调优)
- redis集群
- java后台Date类型与js中的Date类型转化
- java小算法—球从100米高度自由落下
- iOS本地数据存取,看这里就够了
- 关于Arraylist的增量:ensureCapacity()
- 异步加载 JS 的3种方法