1. 题目描述
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
2. 示例
3. 思路
深度遍历想着觉得麻烦,就用了广度遍历,
每层的判断很关键,我是在父节点判断子节点的时候判断下层有多少个子节点然后进行判断的。
4. 遇上的问题
- 深度遍历不可取,选择了广度遍历。
- 每层判断模糊不清,加了每层节点的数量计数器,保证每层进行循环能够判断。
- 装入之后发现是顺序的,先放到栈中然后再从栈中取出来放到返回的list里。
5. 具体实现代码
自己写的代码
/**
* 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) {
//倒叙用的
Stack<List<Integer>> s = new Stack<List<Integer>>();
//返回使用
List<List<Integer>> list = new ArrayList<List<Integer>>();
//判断是否为0
if(root==null){
return list;
}
//广度遍历必备queue
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//添加root,为遍历做好起始准备
queue.add(root);
//计数器count
int count = 1;
int temp = 0;
TreeNode node = null;
while(!queue.isEmpty()){
int i = 0;
//listSon用来存放每层的值
List<Integer> listSon = new ArrayList<Integer>();
//
while(i<count){
node = queue.poll();
listSon.add(node.val);
System.out.println(node.val);
if(node.left!=null){
queue.add(node.left);
temp++;
}
if(node.right!=null) {
queue.add(node.right);
temp++;
}
i++;
}
count = temp;
temp = 0;
s.add(listSon);
}
while(!s.empty()){
list.add(s.pop());
}
return list;
}
}
6. 学习收获,官方一如既往的妙啊
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> levelOrder = new LinkedList<List<Integer>>();
if (root == null) {
return levelOrder;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> level = new ArrayList<Integer>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
level.add(node.val);
TreeNode left = node.left, right = node.right;
if (left != null) {
queue.offer(left);
}
if (right != null) {
queue.offer(right);
}
}
levelOrder.add(0, level);
}
return levelOrder;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/solution/er-cha-shu-de-ceng-ci-bian-li-ii-by-leetcode-solut/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
7 题目来源
闹心的事一来做算法题就不能认真做。只能先赶出来,明天再添加上细致的。 ------swrici