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

Posted whl-shtudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 返回头部元素

具体不做详解.

以上是关于[leetcode]binary-tree-level-order-traversal的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 352 & leetcode 239 & leetcode 295 & leetcode 53 & leetcode 209

如何做LeetCode

leetcode可以写在简历上吗

[Leetcode]leetcode1-10题随记

leetcode分类刷题(续2)

leetcode分类刷题