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

leetcode解题之107 # Binary Tree Level Order Traversal II Java版

2017-03-13 20:08 225 查看
 107. Binary Tree Level Order Traversal II

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]

]

运用广度优先搜索方法,运用队列的方法,每次遍历一层的叶节点,并把下一层的叶节点加入到队列中。

每次遍历一层节点结束时候,将该层节点组成的list放到整体的list之前,实现由底到高的排列。

//树节点定义
public class TreeNode {
int val;
TreeNode left;
TreeNode right;

TreeNode(int x) {
val = x;
}
}

public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> list = new LinkedList<List<Integer>>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if (root == null)
return list;
queue.offer(root);
while (!queue.isEmpty()) {
int num = queue.size();
List<Integer> levelList = new LinkedList<Integer>();
for (int i = 0; i < num; i++) {
TreeNode node = queue.peek();
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
levelList.add(queue.poll().val);
}
// 在链表开始处插入
list.add(0, levelList);
}
return list;
}


补充:

/*
queue方法补充:
add 增加一个元索。 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素。如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素。 如果队列为空,则抛出一个NoSuchElementException异常

offer 添加一个元素并返回true。 如果队列已满,则返回false
poll 移除并返问队列头部的元素 。如果队列为空,则返回null
peek 返回队列头部的元素。 如果队列为空,则返回null

put 添加一个元素。 如果队列满,则阻塞
take 移除并返回队列头部的元素。 如果队列为空,则阻塞

remove、element、offer 、poll、peek 其实是属于Queue接口
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息