题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

题目描述:

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:

给定二叉树 [3,9,20,null,null,15,7],

    3
/ \
9 20
/ \
15 7

返回其自底向上的层次遍历为:

[
[15,7],
[9,20],
[3]
]

思路:

上一题层次遍历一样,只不过输出的顺序取反了!

所以只需要从头添加数组就可以了!

思路一: 迭代

思路二: 递归

代码:

思路一:

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
from collections import deque
if not root: return []
queue = deque()
queue.appendleft(root)
res = []
while queue:
tmp = []
n = len(queue)
for _ in range(n):
node = queue.pop()
tmp.append(node.val)
if node.left:
queue.appendleft(node.left)
if node.right:
queue.appendleft(node.right)
res.insert(0, tmp)
return res

java

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) return res;
Deque<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
List<Integer> tmp = new ArrayList<>();
int n = queue.size();
for (int i = 0; i < n; i++) {
TreeNode node = queue.poll();
tmp.add(node.val);
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
res.add(0, tmp);
}
return res;
}
}

思路二:

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
res = []
def helper(root, depth):
if not root: return
if depth == len(res):
res.insert(0, [])
res[-(depth+1)].append(root.val)
helper(root.left, depth+1)
helper(root.right, depth+1)
helper(root, 0)
return res

java

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root){
List<List<Integer>> res = new LinkedList<>();
helper(res, root, 0);
return res;
} private void helper(List<List<Integer>> res, TreeNode root, int depth) {
if (root == null) return;
if (res.size() == depth) res.add(0, new ArrayList<>());
res.get(res.size() - depth - 1).add(root.val);
helper(res, root.left, depth + 1);
helper(res, root.right, depth + 1);
}
}

最新文章

  1. ABP源码分析十四:Entity的设计
  2. vim 使用 YouCompleteMe
  3. 为网站文字前面添加图标 在线调用 Font Awesome 字体icon小图标 美化网站
  4. Request、Servlet及其子接口
  5. MySQL查询in操作 查询结果按in集合顺序显示(转)
  6. JavaEE Tutorials (30) - Duke综合案例研究示例
  7. 10分钟就能学会的.NET Core配置
  8. mysql5.6 无法使用64odbc连接
  9. MD5加盐 Java加密算法
  10. NuGet的使用、部署、搭建私有服务
  11. BOM 和 DOM
  12. Java中用字符串常量赋值和使用new构造String对象的区别
  13. oracle move 释放 表空间
  14. harbor镜像仓库-01-搭建部署
  15. 什么是SQL游标?
  16. 手机访问电脑中部署的tomcat应用
  17. 关于ajaxFileUpload只能上传一次的解决
  18. Android ContentObserver详解
  19. 项目中使用protobuf 3.0
  20. 五:SpringCloud-Zuul

热门文章

  1. 对浏览器如何计算CSS的研究---------------引用
  2. Missing radix parameter.报错解决方法
  3. 杨辉三角 x
  4. GAN one-shot
  5. create-react-app 构建的项目使用释放配置文件 webpack 等等 运行 npm run eject 报错
  6. Linux基本命令使用(三)
  7. (59)Linux操作系统深入应用
  8. 采用.bat批处理命令快速设置Java环境变量
  9. HBase 集群监控系统构建
  10. Jquery Ajax调用asmx出错问题