这道题我真的是使出了洪荒之力啊
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { TreeNode p = root; List <List<Integer>> allNum = new LinkedList<List<Integer>>(); Map<TreeNode,Integer> nodeMap = new LinkedHashMap<TreeNode,Integer>(); List<TreeNode> nodeList = new LinkedList<TreeNode>(); if(root ==null) return allNum; nodeList.add(root); nodeMap.put(root,0); //Iterator it = nodeList.iterator(); int level = 0,preLevel = -1,i = 0; while(i<nodeList.size()){ p = (TreeNode)nodeList.get(i++); level = nodeMap.get(p); if(p.left !=null){ nodeMap.put(p.left,level+1); nodeList.add(p.left); //System.out.println(level); } if(p.right != null){ nodeMap.put(p.right,level+1); nodeList.add(p.right); } } Iterator it = nodeList.iterator(); //it = nodeList.iterator(); //level = 0; while(it.hasNext()){ p = (TreeNode)it.next(); try{ level = nodeMap.get((TreeNode)p); } catch (Exception e) { e.printStackTrace (); } if(preLevel == level) (allNum.get(0)).add(p.val); else{ List nList = new LinkedList<Integer>(); nList.add(p.val); allNum.add(0,nList); preLevel = level; } } return allNum; } }在来一种递归的方法
public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); traversalTree(root, 0, result);; Collections.reverse(result); return result; } private void traversalTree(TreeNode node, int level, List<List<Integer>> list){ if(node == null){ return; } if(list.size() <= level){ list.add(new ArrayList<Integer>()); } list.get(level).add(node.val); traversalTree(node.left, level+1, list); traversalTree(node.right, level+1, list); } }