您当前的位置: 首页 >  Java

大别山码将

暂无认证

  • 3浏览

    0关注

    126博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

剑指OfferJZ60:把二叉树打印成多行-java版

大别山码将 发布时间:2021-05-27 10:50:38 ,浏览量:3

剑指OfferJZ60:把二叉树打印成多行-java版
    • JZ60:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

JZ60:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

在这里插入图片描述

类似于之字形打印: 在这里插入图片描述

之字形打印:即第一行(奇数行)从左往右打印,第二行(偶数行)从右往左打印,第三行从左往右打印。。。 详情见: 按之字形顺序打印二叉树.

而该题每一行都是按顺序从左到右打印的

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


/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    ArrayList Print(TreeNode pRoot) {
    
        //大数组
        ArrayList ans = new ArrayList();
        //宽搜bfs:使用队列
        Queue queue=new LinkedList();
        //首先队列中初始位置放入当前节点(也就是根节点)
        queue.add(pRoot);
        int sum=1;//用来保存每一层的节点个数
        //int num=1;//用来判断当前层是第几层

        while(!queue.isEmpty() && pRoot!=null){
            //准备一个数组(存储每一层节点的小数组)
            ArrayList list = new ArrayList();
            int temp=0;//用来统计每一层节点个数
            while(sum>0){
                //将当前节点取出并删除
                TreeNode node=queue.poll();
                assert node!=null;
                //并把当前节点的值放入到准备的数组中
                list.add(node.val);

                if(node.left!=null){
                    temp++;
                    queue.add(node.left);//将左孩子放入队列
                }
                if(node.right!=null){
                    temp++;
                    queue.add(node.right);//将右孩子放入队列
                }
                sum--;
            }
            sum=temp;
            /*if(num%2==0){
                //(偶数层)从右往左打印
                for(int i=0,j=list.size()-1;i            
关注
打赏
1664364263
查看更多评论
0.0370s