Binary Tree Level Order Traversal II I

来源:互联网 发布:金融数据分析师是什么 编辑:程序博客网 时间:2024/05/01 04:16

每日一题;

昨天有事儿,没做今天补上。

这两道题是一样的,都是把二叉树广搜,输出每层节点,一个是从下往上,一个是从上往下;

我的思路是:

1、建立一个队列(参考别人后想到的),然后把根节点放进去,

2、依次处理队列中的值,如果有左右孩子,就把左右孩子分别加到队列里面,然后把值放进当前层的列表里面;

3、在层与层之间分割的地方集,在队列中加入一个空节点,遇到空节点时,就把当前列表放进结果列表,然后在队列里面加入层分割;

4、在加入结果队列的时候,过滤一下,如果当前层列表是空的就不要加入结果队列了。

5、从上向下和从下向上只需要把当前层加入结果队列时,指定加入的index就可以了。


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,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its bottom-up level order traversal as:

[  [15,7],  [9,20],  [3]]


public static List<List<Integer>> levelOrderTop(TreeNode root) {        if(root==null) new ArrayList<List<Integer>>();        List<List<Integer>> result=new ArrayList<List<Integer>>();        Queue<TreeNode> queue = new LinkedList<TreeNode>();        TreeNode temp ;        ArrayList<Integer> list = new ArrayList<Integer>();        queue.offer(root);        queue.offer(null);        while (queue.size()>0){            temp = queue.poll();            if(temp == null){                if(!list.isEmpty()){                    queue.offer(null);                    result.add(list);                    list = new ArrayList<Integer>();                }            }else {                if(temp.left!=null)                    queue.offer(temp.left);                if(temp.right!=null)                    queue.offer(temp.right);                list.add(temp.val);            }        }        return result;    }    public static List<List<Integer>> levelOrderBottom(TreeNode root) {        if(root==null) new ArrayList<List<Integer>>();        List<List<Integer>> result=new ArrayList<List<Integer>>();        Queue<TreeNode> queue = new LinkedList<TreeNode>();        TreeNode temp ;        ArrayList<Integer> list = new ArrayList<Integer>();        queue.offer(root);        queue.offer(null);        while (queue.size()>0){            temp = queue.poll();            if(temp == null){                if(!list.isEmpty()){                    queue.offer(null);                    result.add(0,list);                    list = new ArrayList<Integer>();                }            }else {                if(temp.left!=null)                    queue.offer(temp.left);                if(temp.right!=null)                    queue.offer(temp.right);                list.add(temp.val);            }        }        return result;    }


0 0
原创粉丝点击