07. 二叉树的层次遍历 II
题目:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
解法:广度优先搜索
思路:使用栈
代码:
/**
- Definition for a binary tree node.
- public class TreeNode {
-
int val; -
TreeNode left; -
TreeNode right; -
TreeNode(int x) { val = x; } - }
*/
class Solution {
public List<List> levelOrderBottom(TreeNode root) {
if(root==null){
return new ArrayList();
}
Stack<List> stack = new Stack();
Queuequeue = new LinkedList();
List<List> res = new ArrayList();
queue.offer(root);
while(!queue.isEmpty()){
Listlist = new ArrayList();
for(int i =queue.size();i>0;i--){
TreeNode t = queue.poll();
list.add(t.val);
if(t.left!=null){
queue.offer(t.left);
}
if(t.right!=null){
queue.offer(t.right);
}
}
stack.push(list);
}
while(!stack.empty()){
res.add(stack.pop());
}
return res;
}
}
思路二:使用头插法,不用栈
代码二:
/**
- Definition for a binary tree node.
- public class TreeNode {
-
int val; -
TreeNode left; -
TreeNode right; -
TreeNode(int x) { val = x; } - }
*/
class Solution {
public List<List> levelOrderBottom(TreeNode root) {
if(root==null){
return new ArrayList();
}
Queuequeue = new LinkedList();
List<List> res = new ArrayList();
queue.offer(root);
while(!queue.isEmpty()){
Listlist = new ArrayList();
for(int i =queue.size();i>0;i--){
TreeNode t = queue.poll();
list.add(t.val);
if(t.left!=null){
queue.offer(t.left);
}
if(t.right!=null){
queue.offer(t.right);
}
}
res.add(0,list); //头插
}
return res;
}
}
思路三:使用Collections.reverse(res); //反转集合中对象的顺序

浙公网安备 33010602011771号