题目地址(107. 二叉树的层序遍历 II)
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]]
前置知识
公司
- 暂无
思路
本质就是把层序遍历的顺序改变 返回的list可以使用linkedlist使用队列的方式来存储 将数据放到列表的头部
关键点
代码
- 语言支持:Java
Java Code:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {LinkedList<List<Integer>> res = new LinkedList<>();//使用队列来存储层序遍历的节点Queue<TreeNode> queue = new LinkedList<>();if(root==null){return res;}queue.offer(root);while (!queue.isEmpty()) {ArrayList<Integer> temp = new ArrayList<>();//每次循环的时候size都不一样大小 1 -> 2 -> 4 大概这样的int len = queue.size();//循环当前层的节点数量while (len > 0) {//弹出最先进去的节点 并放到队列中TreeNode poll = queue.poll();temp.add(poll.val);//将节点的左右节点放入队列(如果有)if (poll.left != null) {queue.offer(poll.left);}if (poll.right != null) {queue.offer(poll.right);}len--;}res.addFirst(temp);}return res;}}
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=VsuwQ)
- 空间复杂度:
#card=math&code=O%28n%29&id=VMYGl)
