Skip to content

Latest commit

 

History

History

0107

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Description

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,null,null,15,7],

 3 / \ 9 20 / \ 15 7 

return its bottom-up level order traversal as:

[ [15,7], [9,20], [3] ] 

Tags: Tree, Breadth-first Search

思路 0

题意是从下往上按层遍历二叉树,每一层是从左到右,按层遍历,很明显,宽搜第一时间符合,因为是从下往上,所以插入的时候每次插到链表头即可。

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution { publicList<List<Integer>> levelOrderBottom(TreeNoderoot) { if (root == null) returnCollections.emptyList(); List<List<Integer>> list = newLinkedList<>(); LinkedList<TreeNode> q = newLinkedList<>(); q.add(root); while(!q.isEmpty()) { intsize = q.size(); List<Integer> sub = newLinkedList(); for(inti = 0; i < size; ++i) { TreeNodenode = q.remove(); sub.add(node.val); if (node.left != null) q.add(node.left); if (node.right != null) q.add(node.right); } list.add(0, sub); } returnlist; } }

思路 1

另一种思路就是深搜,深搜的时候同时记录深度,然后在相应的层插入节点值即可。

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution { publicList<List<Integer>> levelOrderBottom(TreeNoderoot) { List<List<Integer>> list = newLinkedList<>(); helper(list, root, 0); returnlist; } privatevoidhelper(List<List<Integer>> list, TreeNoderoot, intlevel) { if (root == null) return; if (level >= list.size()) { list.add(0, newLinkedList<>()); } helper(list, root.left, level + 1); helper(list, root.right, level + 1); list.get(list.size() - level - 1).add(root.val); } }

结语

如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:awesome-java-leetcode

close