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;
        }
    }
    
  • 相关阅读:
    (C#) 设定时间格式
    (WPF) MVVM: 动态添加控件及绑定。
    (WPF) MVVM: DataGrid Binding
    (WPF) MVVM: ComboBox Binding, XML 序列化
    (C#) 判断相等?
    ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)
    根据2个经纬度点,计算这2个经纬度点之间的距离
    ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)
    nopcommerce 二次开发
    SQL效率低下原因主要有
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860013.html
Copyright © 2011-2022 走看看