IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 力扣算法Java常见面试题之二叉树的层序遍历,力扣算法学习之路 -> 正文阅读

[数据结构与算法]力扣算法Java常见面试题之二叉树的层序遍历,力扣算法学习之路

? ? ? ?这道题是我司小伙伴进公司面试遇到的一道题,也是力扣热题之一,难度中等,题目如下

? ? ? ?二叉树是常见的数据结构之一,一般我们遇到的都是二叉树的? 前序(先序) 中序 后续 这三种遍历方式,层序遍历就是一层一层的输出每一层节点的值,看返回的数据结构可知,一个list对象里面包含一个list对象,一个用来存放每一层的节点值,一个是所有层的节点值。
? ? ? ? 层序遍历思路理解:? 用两个linkedlist对象,存在树的节点,一个是树的头节点,一个是树的左右节点, 每次取头节点放到 list 对象中,头节点获取完毕后,再把树的左右节点赋值给头节点,再次进行遍历,比如以下树:?

首先头节点? ?queue1? 有完整的树 (1,3,5,7,9,11,13)第一次循环,把 1放到 list中?queue2 中有两颗树 (3,7,9 | 5,11,13)tmp 等于 queue1 等于空 ,queue1 等于?queue2?(3,7,9 | 5,11,13)?queue2?等于?tmp 等于空。

第二次循环, queue1?中有两颗树 (3,7,9 | 5,11,13)内层while循环 第一次 取出 3?放到 list中?queue2 放入两棵树(7 9)第二次 取出 5?放到 list中?queue2 放入两棵树(11 13),此时queue2 中有四颗树 (7? 9 11 13)tmp 等于 queue1 等于空 ,queue1 等于?queue2?(7? 9 11 13)?queue2?等于?tmp 等于空。


第三次循环, queue1 中有四颗树 (7 9 11 13)内层while循环 第一次 取出 7?放到 list中, queue1 7 没有左右节点,因此 queue2 还是空,内层第二次 取出 9?放到 list中,同样queue1 9 没有左右节点,因此 queue2 还是空,内层第三次 取出 11 放到 list中,同样queue1 11 没有左右节点,因此 queue2 还是空,内层第四次 取出 13 放到 list中,同样queue1 13?没有左右节点,因此 queue2 还是空,tmp 等于 queue1 等于空 ,queue1 等于?queue1?等于空? queue1?等于?tmp 等于空。


第四次循环?queue1 为空结束,每一次循环的一个list数组就是一层数据,这样既可

?

package com.example.demo.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;


/**
 * @author qiankun.hu
 * @version 1.0.0
 * @createTime 2021年12月09日 11:23:00
 * @Description 树的层序输出
 */
public class Tree {

    public static void main(String[] args) {

        TreeNode t4 = new TreeNode(7);
        TreeNode t5 = new TreeNode(9);

        TreeNode t2 = new TreeNode(3,t4,null);
        TreeNode t3 = new TreeNode(5,t5,null);

        TreeNode t1 = new TreeNode(1,t2,t3);

        levelOrder(t1);
    }

    /**
     * 层序遍历
     * @param root
     * @return
     */
    public static List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if (root==null)
            return res;
        LinkedList<TreeNode> queue1 = new LinkedList<>(),queue2 = new LinkedList<>();
        queue1.offer(root);
        while (!queue1.isEmpty()){
 
            List<Integer> item = new ArrayList<>();
            while (!queue1.isEmpty()){
                TreeNode node = queue1.remove();
                item.add(node.val);
                if (node.left!=null)
                    queue2.offer(node.left);
                if (node.right!=null)
                    queue2.offer(node.right);
            }
            res.add(item);
            LinkedList<TreeNode> tmp = queue1;
            queue1 = queue2;
            queue2 = tmp;
        }
        return res;
    }

   static class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
     }
  }

}

解题代码来自力扣评论区

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:18:39  更:2021-12-10 11:19:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/10 2:57:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码