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

[leetcode]107. Binary Tree Level Order Traversal II@Java解题报告

2017-08-07 10:27 417 查看
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/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]
]


package go.jacob.day807;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
* 107. Binary Tree Level Order Traversal II
*
* @author Jacob
*/
public class Demo2 {
/*
* 解法一
*/
public List<List<Integer>> levelOrderBottom_1(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
List<List<Integer>> wrapList = new LinkedList<List<Integer>>();

if(root == null) return wrapList;

queue.offer(root);
while(!queue.isEmpty()){
int levelNum = queue.size();
List<Integer> subList = new LinkedList<Integer>();
for(int i=0; i<levelNum; i++) {
if(queue.peek().left != null) queue.offer(queue.peek().left);
if(queue.peek().right != null) queue.offer(queue.peek().right);
subList.add(queue.poll().val);
}
//每次将结果保存到下标为0的位置
wrapList.add(0, subList);
}
return wrapList;
}

/*
* 解法二:
* 思路:用递归实现层序遍历 与正常遍历不同的是,
* 先进行下一层递归,再把当前层的结果保存到res中 结合代码更好理解
*/
List<List<Integer>> res = null;

public List<List<Integer>> levelOrderBottom(TreeNode root) {
res = new ArrayList<List<Integer>>();
if (root == null)
return res;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
levelOrderBottom(queue);

return res;
}

private void levelOrderBottom(Queue<TreeNode> queue) {
if (queue.isEmpty())
return;
int size = queue.size();
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
list.add(node.val);
}
// 理解堆栈的原理,先进行递归,再将list保存到res中
levelOrderBottom(queue);
res.add(list);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: