博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer(63):多行打印二叉树
阅读量:4287 次
发布时间:2019-05-27

本文共 1598 字,大约阅读时间需要 5 分钟。

题目描述

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

分析

前面的文章提到,在二叉树的层序遍历中,使用Queue队列的“先进先出”特性保存访问节点的左右子节点,只需要使用一个ArrayList保存遍历的结果输出即可。

此处与前面的二叉树层序遍历类似但又不同的是,每一行需要单独打印。那么每一行都是一个单独的ArrayList存储,将每一个单独的ArrayList添加到总ArrayList中即可。此外还需要两个变脸:一个变量表示当前层中还没有打印的节点数,另一个变量表示下一层的节点数。比较总ArrayList的size和二叉树的层数可以判断是否需要产生新的单独ArrayList(新行)。

牛客AC:

import java.util.ArrayList;import java.util.Queue;import java.util.LinkedList;/*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
> list = new ArrayList
>(); if(pRoot == null) return list; int countLevel = 0; // 二叉树的层数 int countNodeToBePrinted = 1; // 当前层尚未打印的节点数 int countNodeNextLevel = 0; // 下一层的节点数 // 队列记录节点的左右子树节点 // LinkedList实现了Queue和Stack接口 Queue
queue = new LinkedList
(); queue.offer(pRoot); while(!queue.isEmpty()) { // list的size小于层数,需要增加新的list,保存下一层 if(list.size() <= countLevel) list.add(new ArrayList
()); ArrayList
curList = list.get(countLevel); TreeNode pNode = queue.poll(); curList.add(pNode.val); // 相当于打印,则尚未打印的节点数减去1 countNodeToBePrinted--; // 左右子节点不为空,则入队 if(pNode.left != null) { queue.offer(pNode.left); countNodeNextLevel++; } if(pNode.right != null) { queue.offer(pNode.right); countNodeNextLevel++; } // 当前层全部打印完毕,转到下一层,更新变量 if(countNodeToBePrinted == 0) { countLevel++; countNodeToBePrinted = countNodeNextLevel; countNodeNextLevel = 0; } } return list; }}

参考

1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社

转载地址:http://tkxgi.baihongyu.com/

你可能感兴趣的文章
iOS/swift之截屏
查看>>
iOS/swift之获取系统所有相册和照片录像、封装相册多选
查看>>
iOS/swift之图片压缩、拉伸
查看>>
iOS/swift之图片浏览器
查看>>
iOS/swift之二级菜单导航
查看>>
iOS/swift 单选框和复选框
查看>>
ios/swift之反射
查看>>
ios/swift 之省市区三级联动的实现
查看>>
ios/swift之tableview和collectionview联动
查看>>
java之快捷键,常用框架,常用注意事项,常用小功能,常用jar包
查看>>
Java之Tomcat的安装、在eclipse中配置tomcat、配置虚拟主机
查看>>
java之system类的用法和相关方法
查看>>
java之properties配置文件的使用
查看>>
Java之路径的获取
查看>>
java之文件上传和下载的实现
查看>>
java之实现增删改查的下案例、获取元数据、DBUtils
查看>>
java之图形绘制
查看>>
java之Filter过滤器、filterConfig、禁用jsp缓存、设置图片缓存时间
查看>>
java之struts2(一)
查看>>
MAC之自媒体相关、广告联盟、自由职业
查看>>