您的位置:首页 > 编程语言 > Java开发

[LeetCode]Binary Tree Level Order Traversal II(JAVA)

2016-09-14 10:32 483 查看
这道题我真的是使出了洪荒之力啊

/**
* 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java