leetCode练习(107)

来源:互联网 发布:手机音频制作软件 编辑:程序博客网 时间:2024/04/30 00:49

题目:Binary Tree Level Order Traversal II

难度:easy

问题描述:

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]]

解题思路:

从低到高按层输出二叉树元素。从根节点使用广度搜索BFS,储存每层的节点,最后反向输出即可。

代码如下:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<List<Integer>> levelOrderBottom(TreeNode root) {        Stack<List<Integer>> res=new Stack<>();        Queue<TreeNode> queue=new LinkedList<>();        if(root==null){        return res;        }        queue.add(root);        bfs(res,queue);        List<List<Integer>> list=new ArrayList<>();        while(!res.isEmpty()){        list.add(res.pop());        }        return list;    }    private void bfs(List<List<Integer>> res,Queue<TreeNode> queue){    int len=queue.size();    if(len==0){        return;    }    TreeNode t;    List<Integer> list=new ArrayList<>();    for(int i=0;i<len;i++){    t=queue.poll();    list.add(t.val);    if(t.left!=null){    queue.add(t.left);    }    if(t.right!=null){    queue.add(t.right);    }    }    res.add(list);    bfs(res,queue);    }}

0 0
原创粉丝点击