题目链接 : 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 = Noneclass Solution:def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:from collections import dequeif 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 = Noneclass 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);}
}


一起刷LeetCode - 威行天下 - 博客园​www.cnblogs.com

二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II相关推荐

  1. 二叉树查找结点c语言_二叉树操作详解

    (给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...

  2. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  3. LeetCode 107. 二叉树的层次遍历 II(队列)

    1. 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7],3/ \9 ...

  4. 47. Leetcode 107 - 二叉树的层次遍历 ii (二叉树-二叉树遍历)

    给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 . (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例 1:输入:root = [3,9,20,null,null,15, ...

  5. Leetcode 107. 二叉树的层次遍历 II 解题思路及C++实现

    解题思路: 使用队列实现二叉树的层序遍历,因为题目中要求每一层的val存储在一个vector中,所以在内循环中,还需要一个队列,用以存储更新每一层的节点. 在最后,需要将得到的res数组逆序. /** ...

  6. leetcode 107. 二叉树的层次遍历 II(维护两个队列,通过异或运算切换)

    题目 思路 一个比较啰嗦的解法 维护两个queue,当前队列节点的孩子,都放进另外一个队列里去. 树每切换一层,就切换一次队列,并且把新队列的值全部存起来. 整体上来看,是自顶向下遍历,最后翻转整个l ...

  7. Leetcode 107.二叉树的层序遍历 II (每日一题 20210628 同类型题)

    给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \1 ...

  8. leetcode 107 --- 二叉树程序遍历 ii

    1 题目 给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历) 2 解法 2.1 我的最初解法 按照正常的层序遍历应该是从上到下的,只要用一个栈先临时存 ...

  9. 二叉树的深度_[LeetCode 104] 二叉树的深度

    题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. ** 示例:** 给定二叉树 [3,9,20,null,n ...

最新文章

  1. c++引用与指针的区别
  2. 实现物联网项目,你需要提前知道的6件事情
  3. BookStack在线文档管理系统 v2.9
  4. Go单测测试 — 数据库 CRUD 的 Mock 测试
  5. rc脚本(类的定义与脚本的结构、start方法、stop和status方法、以daemon方式启动)...
  6. 如何在矩池云GPU云中安装MATLAB 2019b软件
  7. React-Native入门(2)-简单阐述跳转
  8. 实录:oracle下大表清理整改
  9. 永久免费http升级到https
  10. css内容过长显示省略号的几种解决方法
  11. 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
  12. js检查关闭浏览器方法
  13. 1、matplotlib绘制一个简单的图形
  14. CRM用户体验对比(二):导入联系人—— 百会、WorkXP
  15. 幼儿园门口摆个考勤机 家长接孩子得打卡
  16. php生产环境性能瓶颈分析,使用XHProf分析PHP性能瓶颈(一)
  17. Tokenized的设计哲学(三)
  18. 编写高效的JAvascript——Nicholas C. Zakas(读书笔记)
  19. 使用Jena-TDB存储RDF本体、知识图谱文件
  20. yarn : 无法加载文件 D:\Development\nvm\node_global\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c

热门文章

  1. Java命令行界面(第27部分):cli-parser
  2. 用微服务和容器替换旧版Java EE应用程序服务器
  3. 嵌套类型的前5个用例
  4. 我最喜欢的IntelliJ IDEA功能
  5. 使用Camel在Amazon上构建分布式工作流应用程序
  6. FXML:使用BuilderFactory的自定义组件
  7. Spring 3.1和JPA的持久层
  8. 超链接标签/<a>标签
  9. 如何执行shell脚本文件
  10. Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容