zoukankan      html  css  js  c++  java
  • [leetCode]107.二叉树层次遍历II

    在这里插入图片描述

    解法 BFS

    按层次从顶至下遍历,将每层结点加在队列尾部,每次从头部取出一层结点。
    使用栈将结果反转。

    /**
     * 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<Integer>> levelOrderBottom(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList<TreeNode>();//队列
            LinkedList<List<Integer>> stack = new LinkedList<>();//栈
            List<List<Integer>> ans = new ArrayList<>();//保存答案的列表
            if(root == null) return ans;
            queue.add(root);//在队列尾部加入结点
            while(!queue.isEmpty()){
                int level_size = queue.size();
                List<Integer> temp = new ArrayList<>();
                for(int i = 0; i < level_size; i++){
                    root = queue.poll();//从队列头部取出结点
                    temp.add(root.val);
                    if(root.left!=null){
                        queue.add(root.left);
                    }
                    if(root.right!=null){
                        queue.add(root.right);
                    }
                }
                stack.push(temp);  //栈顶添加结点   
            }
            while(!stack.isEmpty()){
                ans.add(stack.pop());//栈顶弹出结点
            }
            return ans;
        }
    }
    

    不使用栈可以每次将结点加在链表头部。

    /**
     * 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<Integer>> levelOrderBottom(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList<TreeNode>();//队列
            List<List<Integer>> ans = new LinkedList<>();//保存答案的列表
            if(root == null) return ans;
            queue.add(root);//在队列尾部加入结点
            while(!queue.isEmpty()){
                int level_size = queue.size();
                List<Integer> temp = new ArrayList<>();
                for(int i = 0; i < level_size; i++){
                    root = queue.poll();//从队列头部取出结点
                    temp.add(root.val);
                    if(root.left!=null){
                        queue.add(root.left);
                    }
                    if(root.right!=null){
                        queue.add(root.right);
                    }
                }
                ans.add(0,temp);//将每层结果添加在加在头部
            } 
            return ans;
        }
    }
    
  • 相关阅读:
    AndroidAlarmManager(全局定时器/闹钟)
    Android dialog,activity 屏蔽Home键的教程详解
    实例教程一:电话拨号器
    Android的进程优先级与进程回收详解
    Android Bitmap内存限制
    【30篇突击 android】源码统计七
    在access中支持2个以上left join的方法,又是access的变态规则
    修改vs2005的键盘风格设置
    IE与Firefox的CSS兼容大全(转载)
    实现页面内多个表格在滚动时,表头浮动的效果(是同时多个表格哟)
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860013.html
Copyright © 2011-2022 走看看