LeetCode解析------面试题32-1.从上到下打印二叉树-树

题目:

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

示例1:

给定二叉树: [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回: [3,9,20,15,7]

简单介绍:
题目:从上到下打印二叉树
题目难度:中等
使用语言:JAVA。
这道题来自leetcode题库的树标签。

知识点解析:
以下使用到的TreeNode类,LeetCode官方给出的定义

class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){val=x;} }

解题思路:
首先看题、分析题意,我们可以明确1个关键点:
1.树的层序遍历
既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。
我们采用算法与数据结构的思路来剖析一下这题,

数据结构:
要实现对数据的操作,我们要先明确存储数据的数据结构。
该题的数据结构的作用:
1.TreeNode:(LeetCode官方已定义,在此保留它的定义是为了方便在其他编译器使用)
2.queue:链式队列,保存每层的TreeNode
3.arrayList:顺序表,保存结点顺序

算法:
既然明确了TreeNode,Queue,ArrayList作为解决该题的数据结构,我们就可以开始我们的算法分析了。
1.层序遍历,按层入队列
2.将顺序表转化成数组

代码部分:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x){val=x;}
}
public class Solution {
    public int[] levelOrder(TreeNode root){
        if(root==null) return new int[0];
        Queue<TreeNode> queue=new LinkedList<>();//链式队列
        ArrayList<Integer> arrayList=new ArrayList<>();//顺序表
        queue.add(root);//队列初始化
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            arrayList.add(node.val);
            if(node.left!=null)queue.add(node.left);
            if(node.right!=null)queue.add(node.right);
        }
        int [] res =new int[arrayList.size()];
        for(int i=0;i<arrayList.size();i++){
            res[i]=arrayList.get(i);
        }
        return res;
    }
}


在这里插入图片描述

结语:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!

猜你喜欢

转载自blog.csdn.net/weixin_44337475/article/details/106015191