LeetCode102.二叉树的层序遍历(Java实现)

LeetCode102.二叉树的层序遍历(Java实现)

二叉树简介

在这里插入图片描述

百度百科:

  • 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。
  • 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点 [1] 。

如上图:层序遍历就应该是 F C E A D H G B M

思考:如何实现

思路分析

  1. 首先我们确定这个树不为空,如果为空返回空数据,如果不为空再操作。

  2. 在层序遍历的时候我们发现,如果根节点是被遍历对象,先遍历根节点,再遍历左孩子,然乎右孩子。

  3. 确保左孙子节点在右孩子节点之后,如果孙子或者孩子节点为空不需要遍历。

  4. 如果后代没有可以遍历的节点,则返回数据,遍历结束。

编码实现(java)

package com.yang.leetcode.classic;

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

/**
 * @author: fudy
 * @date: 2020/9/14 下午 03:56
 * @Decription: leetCode102:层序遍历
 **/
@SuppressWarnings("unused")
public class LevelTraversal {
    
    

    // 数据结构
    class TreeNode {
    
    
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
    
    
            val = x;
        }
    }

    public List<List<Integer>> levelOrder(TreeNode root) {
    
    
        List<List<Integer>> lists = new ArrayList<>();
        // 判空处理
        if (root == null) {
    
    
            return lists;
        }
        // 这里存放树的节点
        List<TreeNode> nodes = new ArrayList<>();
        // 先把root节点加入节点集合
        nodes.add(root);
        // 如果节点集合有节点需要遍历
        while (!nodes.isEmpty()) {
    
    
            // 设置遍历集合大小
            int size = nodes.size();
            // 存放数据
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < size; i++) {
    
    
                // 取出第一集合元素,按照加入集合顺序打印
                TreeNode remove = nodes.remove(0);
                // 把节点(类似于根节点)信息加入信息集合
                list.add(remove.val);
                if (remove.left != null) {
    
    
                    // 如果有左孩子先加左孩子
                    nodes.add(remove.left);
                }
                if (remove.right != null) {
    
    
                    // 如果有右孩子加入右孩子
                    nodes.add(remove.right);
                }
            }
            // 本次数据加入总的数据集合中
            lists.add(list);
        }
        return lists;
    }
}

如有其他解法,欢迎评论!

猜你喜欢

转载自blog.csdn.net/qq_44112474/article/details/108586378