网站首页 > 开源技术 正文
package com.company.二叉树;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class 二叉树数的Z字型遍历 {
/**
* 内部类
*/
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
/**
* 广度优先解法
* 思路分析:
* 第一步:先进行边界值判断
* 第二步:创建一个队列,入队根节点
* 第三步:whlile循环出队
* 第四步:重点:每次出队的时候会把左右节点进行入队,可以理解为入队了第二层的所有的节点,
* 第二层出队时,把所有的节点拿出来之后,放入list中,然后把所有第二层节点的左右节点入队,
* 这个地方要注意Z型遍历时,规律是偶数是从左到右,奇数是从右到左,
* 所以用取余数来判断增加节点的数序, 然后就是第三层,依次循环处理,注意边界值的判断,
* 如果是空的话就不用放入list中, 第五步:依次按循环的list增加到全局的list中返回。
* @param root
* @return
*/
public List<List<Integer>> zLevelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
if (root == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
ArrayList<Integer> res = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
res.add(node.val);
if (i%2 == 0) {
if (root.left != null) {
queue.offer(root.left);
}
if (root.right != null) {
queue.offer(root.right);
}
} else {
if (root.right != null) {
queue.offer(root.right);
}
if (root.left != null) {
queue.offer(root.left);
}
}
}
list.add(res);
}
return list;
}
}
猜你喜欢
- 2024-10-24 0826-5.16.2-如何读取和分析Zookeeper Transaction Log 和Snapshots
- 2024-10-24 揭秘!淘宝天猫海量图片元信息都存储在哪?
- 2024-10-24 带你了解Android窗口机制Window、PhoneWindow和DecorView之间的关系
- 2024-10-24 Zookeeper进阶学习(zookeeper详解)
- 2024-10-24 分布式锁的多种实现方式详解(分布式锁的多种实现方式详解图)
- 2024-10-24 Redis radix tree源码解析(redis源码解读)
- 2024-10-24 ZooKeeper 相关概念以及使用小结(zookeeper的zab)
- 2024-10-24 你不得不知的云计算与虚拟化基础知识(下)
- 2024-10-24 很遗憾,没有一篇文章能讲清楚ZooKeeper
- 2024-10-24 Vmware 虚拟机初始化(vmware虚拟机恢复初始)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)