*LeetCode-Binary Tree Level Order Traversal

来源:互联网 发布:手机光绘软件 编辑:程序博客网 时间:2024/06/06 00:21

首先不知道java中bfs用什么数据结构,知道用queue之后,不知道queue怎么实现。

java中一般使用

Queue queueA = new LinkedList();Queue queueB = new PriorityQueue();

来实现queue,常用linkedlist来实现没有优先级的,即单纯的fifo.

记得看queue的讲解,里面有两套function,分别对应

offer peek poll都是带返回值的。

其次要注意while里面控制每层node个数的,就是queue中现在有几个node,记得要先获取num

public class Solution {    public List<List<Integer>> levelOrder(TreeNode root) {        Queue <TreeNode> que = new LinkedList<TreeNode>();        List<List<Integer>> ans = new ArrayList<List<Integer>>();        if ( root == null)            return ans;        que.offer(root);        while (!que.isEmpty()){            int num = que.size();            List <Integer> list = new ArrayList<Integer>();            for ( int i = 0; i < num; i ++ ){                if ( que.peek().left != null )                    que.offer(que.peek().left);                if ( que.peek().right != null )                    que.offer(que.peek().right);                list.add( que.poll().val);            }            ans.add(list);        }        return ans;    }}

递归的方法:

public List<List<Integer>> levelOrderBottom(TreeNode root) {    LinkedList<List<Integer>> list = new LinkedList<List<Integer>>();    addLevel(list, 0, root);    return list;}private void addLevel(LinkedList<List<Integer>> list, int level, TreeNode node) {    if (node == null) return;    if (list.size()-1 < level) list.addFirst(new LinkedList<Integer>());    list.get(list.size()-1-level).add(node.val);    addLevel(list, level+1, node.left);    addLevel(list, level+1, node.right);}




0 0
原创粉丝点击