[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