• [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;
        }
    }
    
  • 相关阅读:
    新的开始!
    find命令之mtime
    glances服务器监控工具
    centos7最小化安装改为图形界面
    ansible笔记(3)-文件操作模块(上)
    php-fpm参数详解
    ansible笔记(2)-模块简介
    centos创建交换分区
    等保测评三级整改-身份鉴别
    vsftp安装配置
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860013.html
Copyright © 2020-2023  润新知