leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)
题目:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
- 3
- / \
- 9 20
- / \
- 15 7
return its bottom-up level order traversal as:
- [
- [15,7],
- [9,20],
- [3]
- ]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
说明:
1)与层序遍历1相似,只是本题遍历方向不同:从下往上,其他相同
2) 代码只要加上一行逆序输出的语句即可
实现:
一、 递归实现:
- *
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- vector<vector<int> > levelOrder(TreeNode *root) {
- vector<vector<int>> result;
- traverse(root,,result);
- std::reverse(result.begin(),result.end());//比层序遍历1多此一行
- return result;
- }
- void traverse(TreeNode *root,size_t level,vector<vector<int>> &result)
- {
- if(root==nullptr) return;
- if(level>result.size()) result.push_back(vector<int>());
- result[level-].push_back(root->val);
- traverse(root->left,level+,result);
- traverse(root->right,level+,result);
- }
- };
二、迭代实现:
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- /*常规层序遍历思想,每层入队结束压入一个空节点,作为标志*/
- class Solution {
- public:
- vector<vector<int> > levelOrder(TreeNode *root) {
- vector<vector<int>> vec_vec_tree;//创建空vector,存放最后返回的遍历二叉树的值
- vector<int> level;//创建空的vector,存放每一层的遍历二叉树的值
- TreeNode *p=root;
- if(p==nullptr) return vec_vec_tree;//如果二叉树空,返回空vector<vector<int>>
- queue<TreeNode *> queue_tree;//创建一个空队列
- queue_tree.push(p);//root节点入队列
- queue_tree.push(nullptr);//空节点入队列
- while(!queue_tree.empty())//直到队列为空
- {
- p=queue_tree.front(); //头结点取值,并出队列
- queue_tree.pop();
- if(p==nullptr&&!level.empty())//节点为空并且队列不为空
- {
- queue_tree.push(nullptr);//入队空节点,与下一层隔开
- vec_vec_tree.push_back(level);//已遍历的层入队
- level.clear();//清空vecor level
- }
- else if(p!=nullptr)//如果节点不空
- {
- level.push_back(p->val);//遍历
- if(p->left) queue_tree.push(p->left);//若有左右孩子,则入队列
- if(p->right) queue_tree.push(p->right);//注意入队顺序:先左后右
- }
- }
- std::reverse(vec_vec_tree.begin(),vec_vec_tree.end());//比层序遍历1多此一行
- return vec_vec_tree;
- }
- };
b 迭代实现2
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- /*两个队列实现*/
- class Solution {
- public:
- vector<vector<int> > levelOrder(TreeNode *root) {
- vector<vector<int> > result;
- if(root == nullptr) return result;
- queue<TreeNode*> current, next;//两个队列,保存当层(current)和下层(next)节点
- vector<int> level; // 存放每层的节点值
- current.push(root);
- while (!current.empty())//直到二叉树遍历完成
- {
- while (!current.empty())//直到本层二叉树遍历完成
- {
- TreeNode* node = current.front();//取队首节点,出队列
- current.pop();
- level.push_back(node->val);//访问节点值
- if (node->left != nullptr) next.push(node->left);//若存在左右节点,则压入next队列中
- if (node->right != nullptr) next.push(node->right);//注意入队顺序为先left后right
- }
- result.push_back(level);//压入总vector
- level.clear();//清vector
- swap(next, current);//next队列和current队列交换
- }
- std::reverse(result.begin(),result.end());//比层序遍历1多此一行
- return result;
- }
- };
leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)的更多相关文章
- LeetCode Binary Tree Level Order Traversal II (二叉树颠倒层序)
题意:从左到右统计将同一层的值放在同一个容器vector中,要求上下颠倒,左右不颠倒. 思路:广搜逐层添加进来,最后再反转. /** * Definition for a binary tree no ...
- [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- [Leetcode] Binary tree level order traversal ii二叉树层次遍历
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- LeetCode OJ:Binary Tree Level Order Traversal(二叉树的层序遍历)
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- LeetCode: 107_Binary Tree Level Order Traversal II | 二叉树自底向上的层次遍历 | Easy
本题和上题一样同属于层次遍历,不同的是本题从底层往上遍历,如下: 代码如下: struct TreeNode { int val; TreeNode* left; TreeNode* right; T ...
- leetcode 107.Binary Tree Level Order Traversal II 二叉树的层次遍历 II
相似题目: 102 103 107 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode ...
- 107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 ...
- [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历 II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- [leetcode]Binary Tree Level Order Traversal II @ Python
原题地址:http://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ 题意: Given a binary tree, ...
随机推荐
- java实现图片与base64字符串之间的转换
package cn.com; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOEx ...
- APP接口版本兼容的问题
现在基本每个公司都做APP,所以大家都面临 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改.新的APP和接口开发后,接口如何兼容老的 ...
- GetWindowThreadProcessId用法(转)
函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的. 函数原型:DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpd ...
- C:数组
数组.排序 关于排序 :参考 关于数组: 参考 求a[i][j]行与列的和然后求平均值 参考 二维数组使用指针的表示方法 参考 字符串数组:char name [5][20] ={ {} , {} ...
- Gson 和 Fastjson 你不知道的事
背景 目前在公司负责的业务, 主要是跟JSON数据打交道, fastjson .gson都用, 他们适用于不同场景.fastjson号称是业界处理json效率最高的框架, 没有之一.但在某些场景下, ...
- Web网站压力测试工具
使用Microsoft Web Application Stress Tool对web进行压力测试 不错关于压力测试博客: http://blog.sina.com.cn/s/blog_5155e8d ...
- EWARM STM32 向量表偏移设置
system_stm32f2xx.c #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table ...
- 书写CSS需要注意的地方
1.注意对图片设置宽高和转化为块2.文字超出的设置3.空白部分用空div来设置4.做之前考虑重用,重用部分命名不要和内容相关 尽量公共(comWidth area small big img list ...
- Flexigrid在IE下不显示数据的处理
文章总结自我的论坛提问: http://bbs.csdn.net/topics/390498434?page=1#post-394918028 解决方法: 网上的答案经我验证都是不靠谱的,以后大家就知 ...
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...