遍历二叉树,从上往下遍历。但是同层节点可以从左向右遍历,也可以从右向左遍历(也就是之字型遍历),其中,都需要队列进行实现。只是按照之字型稍微麻烦一些。

(1)从上往下打印出二叉树的每个节点,同层节点从左至右打印。
需要一个队列,队列里面放节点(从根节点开始),然后依次进行打印。
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val){
this.val = val;
}
}
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null)
return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode t = queue.poll();
list.add(t.val);
if(t.left != null) queue.add(t.left);
if(t.right != null) queue.add(t.right);
}
return list;
}
}
(2)请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解析:之字形打印二叉树,不要将所有层放入ArrayList中后再将偶数层进行reverse(),这样可以实现,但是数据量大的时候效率太低。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
if(pRoot==null){
return result;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
int rows=1;
queue.add(pRoot);
while(!queue.isEmpty()){
ArrayList<Integer> list=new ArrayList();
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode t=queue.poll();
if(rows%2==0){
list.add(0,t.val); //将元素插入指定位置(头部),也就相当于倒序了
}else{
list.add(t.val); //将元素插入尾部
}
if(t.left!=null){
queue.offer(t.left);
}
if(t.right!=null){
queue.offer(t.right);
}
}
result.add(list);
rows++;
}
return result;
}
}
(3)从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
这道题就是典型的二叉树层次遍历。
思路:因为我们要按层打印,所以需要设置标志量。
其次:我们需要三个集合:
第一个集合用于存放结果集
第二个集合用于临时存放每一层的结果,等到一层结束之后,再将其加入到最终结果集中。注意,每一次使用完这个集合之后,需要将其清空,以便下一次存放。
第三个集合用于存放节点。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.*;
class TreeNode
{
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val)
{
this.val = val;
}
}
public class Solution
{
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot)
{
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>(); // 存放节点
// 检查是否为空
if (pRoot == null)
return result;
queue.add(pRoot);
int start = 0;
int end = 1; // 第一行
while (!queue.isEmpty())
{
TreeNode treeNode = queue.poll();
end--;
arrayList.add(treeNode.val);
if (treeNode.left != null) // 如果有左节点
{
queue.add(treeNode.left);// 将左节点加入linkedList中
start++; // 标志进入下一行
}
if (treeNode.right != null)
{
queue.add(treeNode.right);
start++; // 标志进入下一行
}
if (end == 0)
{ // 此时也就是说明把一层已经打印完了,应该将其加入结果集中
result.add(new ArrayList<Integer>(arrayList)); // 加入结果集中
arrayList.clear();// 必须将临时存放结果的集合清空,以便进行下一次存放
end = start; // 恢复原状
start = 0;
}
}
return result;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java实现二叉树的遍历
# 二叉树遍历
# java
# java二叉树遍历算法
# java实现二叉树遍历的三种方式
# Java二叉树的遍历思想及核心代码实现
# Java实现二叉树的深度优先遍历和广度优先遍历算法示例
# Java实现的二叉树常用操作【前序建树
# 前中后递归非递归遍历及层序遍历】
# Java中二叉树的建立和各种遍历实例代码
# Java完全二叉树的创建与四种遍历方法分析
# 图解二叉树的三种遍历方式及java实现代码
# java实现二叉树的创建及5种遍历方法(总结)
# java 完全二叉树的构建与四种遍历方法示例
# java实现按层遍历二叉树
# 遍历
# 二叉树
# 将其
# 字型
# 往下
# 再将
# 清空
# 第一个
# 也就
# 以此类推
# 第二个
# 之字形
# 可以实现
# 要将
# 第三个
# 量大
# 太低
# 这道
# 大家多多
# 为空
相关文章:
建站之星各版本价格是多少?
名字制作网站免费,所有小说网站的名字?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
建站主机服务器选购指南:轻量应用与VPS配置解析
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
北京制作网站的公司,北京铁路集团官方网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何在Golang中指定模块版本_使用go.mod控制版本号
建站之星安装提示数据库无法连接如何解决?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何在自有机房高效搭建专业网站?
韩国服务器如何优化跨境访问实现高效连接?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
如何快速生成凡客建站的专业级图册?
如何解决VPS建站LNMP环境配置常见问题?
建站主机与服务器功能差异如何区分?
如何在IIS管理器中快速创建并配置网站?
一键网站制作软件,义乌购一件代发流程?
如何在服务器上三步完成建站并提升流量?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
制作网页的网站有哪些,电脑上怎么做网页?
外贸公司网站制作哪家好,maersk船公司官网?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
,sp开头的版面叫什么?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星代理费用多少?最新价格详情介绍
内网网站制作软件,内网的网站如何发布到外网?
建站之星如何修改网站生成路径?
如何确保FTP站点访问权限与数据传输安全?
建站之星安装模板失败:服务器环境不兼容?
5种Android数据存储方式汇总
如何快速建站并高效导出源代码?
如何高效配置香港服务器实现快速建站?
再谈Python中的字符串与字符编码(推荐)
如何快速查询域名建站关键信息?
如何选择可靠的免备案建站服务器?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何选择高效响应式自助建站源码系统?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
怀化网站制作公司,怀化新生儿上户网上办理流程?
网站制作的步骤包括,正确网址格式怎么写?
*请认真填写需求信息,我们会在24小时内与您取得联系。