LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)

26 篇文章 0 订阅
2 篇文章 0 订阅

一,问题描述:
1,给定一棵二叉树,返回它的层次遍历。
2,例如:
这里写图片描述

3,解题思路:
使用LinkedList queue=new LinkedList()。因为LinkedList具有队列的性质,即先进先出规则。然后统计每一层的节点个数,然后在每层从左到右输出节点。

二,AC了的程序(使用Java实现的)

import java.util.*;
class TreeNode{   //节点的构造
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x)
    {
        val=x;
    }
}

public class Test2{

    List<List<Integer>> list=new ArrayList<List<Integer>>();
    public List<List<Integer>> levelOrder(TreeNode root)
    {
        if(root==null)
        {
            return list;
        }

        LinkedList<TreeNode> queue=new LinkedList<TreeNode>();  //定义一个LinkedList集合,其类型是TreeNode
        queue.offer(root);  //首先把根进入队列中
        while(!queue.isEmpty())  //队列不为空的
        {
            int num=queue.size();  //队列的长度;
            List<Integer> templist=new ArrayList<Integer>();   //定义一个ArrayList集合

            while(num>0)//首先判断num是否大于0先获取每一层的结点个数。
            {
                TreeNode node=queue.peek(); //查看队头元素,但是不删除队头的元素,队列是先进先出的规则
                if(node.left!=null) //该节点的左孩子不为空
                {
                    queue.offer(node.left); //将左孩子进入队尾
                }
                if(node.right!=null)   //如果该节点的右孩子不为空
                {
                    queue.offer(node.right);  //将右孩子进入队尾。
                }

                int data=queue.poll().val;  //将节点从队头出队// 。
                templist.add(data); //将出的节点加入到tempList集中
                num--;  //然后每次减1.
            }
            list.add(templist);
        }

        return list;

    }
    public static void main(String []args)
    {
        Test2 test=new Test2();
        Scanner scan=new Scanner(System.in);
        TreeNode root=new TreeNode(3);
        TreeNode p2=new TreeNode(9);
        TreeNode p3=new TreeNode(20);
        TreeNode p4=new TreeNode(15);
        TreeNode p5=new TreeNode(7);

        root.left=p2;
        root.right=p3;
        p3.left=p4;
        p3.right=p5;

        List<List<Integer>> list=test.levelOrder(root);
        Iterator<List<Integer>> it1=list.iterator();
        while(it1.hasNext())
        {
            List<Integer> list2=it1.next();
            Iterator<Integer> it2=list2.iterator();
            while(it2.hasNext())
            {
                int data=it2.next();
                System.out.print(data+" ");
            }
            System.out.println();
        }

    }
}

运行结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值