[leetcode]binary-tree-level-order-traversal

题目:Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:Given binary tree{3,9,20,#,#,15,7},return its bottom-up level order traversal as:[[15,7],[9,20],[3]]

简单理解:将树的每一层节点值存储到一个列表里,在将列表放入到一个列表中.

思路:使用层序遍历整个树,每一层使用一个单独的列表去记录节点值,再将列表存入到一个大的列表中.

简单易懂做法:首先考虑使用队列结构实现树的层序遍历,然后保存每一层节点值.

代码:

 1 import java.util.*;
 2 public class Solution {
 3    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
 4         ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
 5         if(root == null) return arrayLists;
 6         Queue<TreeNode> queue = new LinkedList<>();//使用链表实现的队列
 7         queue.add(root);
 8         while(!queue.isEmpty()){
 9             ArrayList<Integer> arr = new ArrayList<>();//记录每层节点值的列表
10             int size = queue.size();
11             for(int i = 0;i < size;i++){
12                 TreeNode tmp = queue.poll();//每次删除一个头结点
13                 arr.add(tmp.val);
14                 if(tmp.left != null) queue.add(tmp.left);
15                 if(tmp.right != null) queue.add(tmp.right);
16             }
17             arrayLists.add(0,arr);//插入到总列表的头部
18         }
19         return arrayLists;
20     }
21 }

ps:简单说一下java.util库中的队列,首先queue(FIFO)有二种实现结构可以是ArrayList也可以是LinkedList.

add,offer  添加元素

remove,poll 移除并返回队列头元素

element,peek 返回头部元素

具体不做详解.

猜你喜欢

转载自www.cnblogs.com/whl-shtudy/p/9564574.html