【每天一题】LeetCode 0107. 自底向上层遍历二叉树

开源地址:点击该链接
题目描述
* 给定一个二叉树,返回其节点值自底向上的层次遍历。
* 即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历
*
* 例如:
* 给定二叉树 [3,9,20,null,null,15,7]
* 3
* / \
* 9 20
* / \
* 15 7
* 返回其自底向上的层次遍历为:
* [
* [15,7],
* [9,20],
* [3]
* ]
*
解题思路
* 由于需要按层进行组成,且是vector<vector<int>>
* 所以必须把每个层分开记录,另一点就是还要实现逆序
* 分层可以通过单独记录每层节点来完成,而逆序有两种方式
* 第一种是直接正序记录,然后再颠倒顺序
* 第二种是进行递归记录每层节点,最后在每层中添加数据
* 这样第二种就省去了第一种方法中颠倒顺序这步的操作
*
示例代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if (root == NULL)
return {};
vector<vector<int>> res;
vector<TreeNode *> nodes;
nodes.push_back(root);
do_order(nodes, res);
return res;
}
void do_order(vector<TreeNode *> &nodes, vector<vector<int>> &res) {
if (nodes.size() == 0)
return;
vector<TreeNode *> next_level;
for (int i=0; i<nodes.size(); i++) {
if (nodes[i]->left)
next_level.push_back(nodes[i]->left);
if (nodes[i]->right)
next_level.push_back(nodes[i]->right);
}
do_order(next_level, res);
vector<int> temp;
for (int i=0; i<nodes.size(); i++) {
temp.push_back(nodes[i]->val);
}
res.push_back(temp);
}
};
【每天一题】LeetCode 0107. 自底向上层遍历二叉树的更多相关文章
- 李洪强iOS经典面试题35-按层遍历二叉树的节点
李洪强iOS经典面试题35-按层遍历二叉树的节点 问题 给你一棵二叉树,请按层输出其的节点值,即:按从上到下,从左到右的顺序. 例如,如果给你如下一棵二叉树: 3 / \ 9 20 ...
- 【Leetcode】二叉树层遍历算法
需求: 以层遍历一棵二叉树,二叉树的结点结构如下 struct tree_node{ struct tree_node *lc; struct tree_node *rc; int data; }; ...
- LeetCode(102):二叉树的层次遍历
Medium! 题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...
- 二叉树遍历(flist)(已知中序和按层遍历,求先序 )
问题 F: 二叉树遍历(flist) 时间限制: 1 Sec 内存限制: 128 MB提交: 11 解决: 9[提交][状态][讨论版][命题人:quanxing][Edit] [TestData ...
- Binary Tree Level Order Traversal,层序遍历二叉树,每层作为list,最后返回List<list>
问题描述: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...
- 剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储
剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数. 以上 ...
- Leetcode 94. Binary Tree Inorder Traversal (中序遍历二叉树)
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...
- [Leetcode] Binary tree postorder traversal二叉树后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- LeetCode OJ:Binary Tree Inorder Traversal(中序遍历二叉树)
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
随机推荐
- UML组件图
组件图用于可视化在一个系统中的物理组件.这些组件包括库,程序包,文件等. 组件图 = 构件(Component)+接口(Interface)+关系(Relationship)+端口(Port)+连接器 ...
- HTML学习 day04
1.字体.文本声明 声明语句必须要包含在{}号之中: 属性和属性值之间用":"分隔: 当有多个属性时,用":"进行区分: 在书写属性时属性之间使用空格.换行等, ...
- 《手把手教你》系列练习篇之2-python+ selenium自动化测试(详细教程)
1. 简介 今天我们还是继续练习练习基本功,各位小伙伴要耐住住性子,要耐得住寂寞啊,不要急躁,后面你会感谢你在前边的不断练习的.到后面也是检验你前边的学习成果的一次很好实践. 本文介绍如何通过link ...
- Dubbo实现登陆
一.目录展示 二.dubbo_logins_service 2.1 实体类和service层 2.2 logins实体类 package com.login.entity; import java.i ...
- 安装anaconda后启动终端头部会有(base)如何解决
conda config --show conda config --set auto_activate_base False
- 剑指Offer-34.数组中的逆序对(C++/Java)
题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%10000 ...
- react可拖动的好用的树结构插件
react tree 可拖动树结构: github地址: github地址:react-sortable-tree 安装: NPM npm install react-sortable-tree –s ...
- MyEclispe启动Tomcat7时出现错误The servlets named [LoginServlet] and [com.liu.control.LoginServlet] are both
刚开始尝试写Servlet代码,第一天就碰到这个错误,在网上找了很多资料才找到解决办法,在此记录一下. org.apache.catalina.LifecycleException: Failed t ...
- OC中ARC forbids explicit message send of release错误
在ios编程中,如果成员变量为对象,我们需要对成员变量内存管理,否则,会造成内存泄露.即我们要对成员变量进行手动的内存释放. 很显然,是ARC的问题. 错误原因:在创建工程的时候点选了“Use Aut ...
- WIN2003+IIS6环境SSL证书的安装
下载LOFTER我的照片书 | 一.解压证书文件.证书文件解压后,找到后缀为.pfx的压缩包,进行解压到固定位置.(一般放在网站根目录)