剑指 Offer 32 . 从上到下打印二叉树
2023-02-18 16:35:25 时间
题目:
【1】第一种
【2】第二种
思路:
【1】第一种,说白了就是正常的二叉树的层次遍历,顺序为从上到下,从左到右,这种一般是借助于队列或者其他数据结构完成。
【2】第二种,算是第一种的变种,在层次遍历的基础上加上返回的数据层次,而且还要对偶数层进行数据的反转。
【3】其次吧,这个题应该可以归到简单类型中。
代码展示:
//剑指 Offer 32 . 从上到下打印二叉树 public class Offer { //思路一:说白了就是层次遍历然后统一塞到一个数组里面,顺序为从上到下,从左到右 public static int[] Method1(TreeNode root){ if(root == null){ return new int[0]; } //层次遍历少不了要借助队列 Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); ArrayList<Integer> ans = new ArrayList<>(); while(!queue.isEmpty()) { TreeNode node = queue.poll(); ans.add(node.val); if(node.left != null){ queue.add(node.left); } if(node.right != null){ queue.add(node.right); } } // 之所以转一遍是因为ArrayList存储的是对象,所以将Integer对象类型要转回为int用于返回 int[] res = new int[ans.size()]; for(int i = 0; i < ans.size(); i++){ res[i] = ans.get(i); } return res; } //思路一:说白了就是层次遍历,然后返回也是要分层次的 //但是存在一个坑就是,遇到偶数层是从右到左 public static List<List<Integer>> Method2(TreeNode root){ if(root==null) { return new ArrayList<>(); } //层次遍历少不了要借助队列 Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); List<List<Integer>> res = new ArrayList<>(); int level = 1; while(!queue.isEmpty()) { int size = queue.size(); LinkedList<Integer> item = new LinkedList<>(); for (int i=0;i<size;i++){ TreeNode node = queue.poll(); item.add(node.val); if(node.left != null){ queue.add(node.left); } if(node.right != null){ queue.add(node.right); } } if (level%2 ==1){ res.add(item); }else { LinkedList<Integer> temp = new LinkedList<>(); for (int i = item.size()-1 ; i>=0 ;i-- ){ temp.add(item.get(i)); } res.add(temp); } level++; } return res; } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } }
相关文章
- kernel 启动流程
- UBOOT 启动流程
- 野火 STM32MP157 开发板内核和设备树的编译烧写
- 野火 STM32MP157 开发板 UBOOT 编译烧写
- ESP32 多线程入门实验
- VSCode 打开ESP32工程问题
- LVGL 定时器
- LVGL 字体
- LVGL 显示图片
- LVGL SCROLL循环滚动
- QT MySQL连接自动断开
- ESP32 SNTP校时
- ESP32 IDF 获取天气信息
- ESP32 分区表
- ESP32 使用LVGL案例
- LVGL 日志
- esp-idf 移植 lvgl8.3.3
- ESP32 + IDF + LED
- VSCode 中安装 esp-idf
- esp-idf 安装(Windows )