当前位置:网站首页>二叉树的锯齿形层序遍历[分层遍历方式之一 -> 前序遍历+level]
二叉树的锯齿形层序遍历[分层遍历方式之一 -> 前序遍历+level]
2022-06-29 03:16:00 【REN_林森】
前言
层次遍历是操作树的基础,而分层遍历就是层次遍历的变体,一般可用队列+层size来分层,也可以递归遍历+level来分层。通过锯齿形分层遍历二叉树来练习前序遍历+level来分层。
一、二叉树的锯齿形层序遍历

二、递归遍历+level分层
package everyday.medium;
import java.util.ArrayList;
import java.util.List;
// 二叉树的锯齿形层序遍历
public class ZigzagLevelOrder {
/* target:单数双数层倒着输出,双数层正着输出,从0层开始。 */
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
// 前序遍历 + level 实现层次遍历。
List<List<Integer>> ans = new ArrayList<>();
preOrder(root, ans, 0);
return ans;
}
private void preOrder(TreeNode root, List<List<Integer>> ans, int level) {
// null节点,递归终止。
if (root == null) return;
// 单数层倒着输出,双数层正着输出,从0层开始。
// 一层一层往下走的,所以选择取等。
if (level == ans.size()) ans.add(new ArrayList<>());
List<Integer> cur = ans.get(level);
if ((level & 1) == 0) cur.add(root.val);
else cur.add(0, root.val);
// 前序遍历
preOrder(root.left, ans, level + 1);
preOrder(root.right, ans, level + 1);
}
// Definition for a binary tree node.
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;
}
}
}
总结
1)层次遍历,分层遍历。
2)队列+层size分层 | 递归遍历 + level分层。
参考文献
边栏推荐
- 想当设备管理师?满足这三个报考条件就可以
- Several ways to add breakpoints using GDB
- Bluebridge cup 2022 preliminaries - minesweeping
- 如何理解MySQL的索引?
- [flutter topic] 66 diagram basic constraints box (I) yyds dry goods inventory
- FPGA(七)RTL代码之三(复杂电路设计2)
- MySQL advanced SQL statement (Part 2)
- 嵌入式开发如何进行源代码保密工作
- Concise words tell about technical people who must master basic IT knowledge and skills. Part 1
- 目前市面上增额终身寿险利率最高的产品是哪个?
猜你喜欢

2022-2028 global pneumatic test probe industry survey and trend analysis report

allegro对走好的线取消走线的方法

初探元宇宙存储,数据存储市场下一个爆点?
![[flutter topic] 66 diagram basic constraints box (I) yyds dry goods inventory](/img/8b/55a43383e1cb6b37231dba980c7b11.jpg)
[flutter topic] 66 diagram basic constraints box (I) yyds dry goods inventory

sql训练01

图扑软件智慧能源一体化管控平台

Etcd教程 — 第六章 Etcd之核心API V3

想当设备管理师?满足这三个报考条件就可以

1110: nearest common ancestor (function topic)

18. `bs對象.節點名.next_sibling` 獲取兄弟節點
随机推荐
Synchronous real-time data of Jerry's watch [chapter]
1110: 最近共同祖先(函数专题)
[線性代數] 1.1 二階與三階行列式
[thread communication]
[issue 259] uncover how count is executed in MySQL?
线程池是什么老鸡?
FPGA (VIII) RTL code IV (basic circuit design 1)
Is it safe to open a stock account by mobile phone? Is it difficult to open an account?
手机开户股票开户安全吗?开户很难么?
Synchronous movement state of Jerry's watch [chapter]
FPGA(七)RTL代码之三(复杂电路设计2)
图扑软件智慧能源一体化管控平台
2022-2028 global secondary butyl lithium industry research and trend analysis report
MATALB signal processing - signal transformation (7)
逆序对对数计算,顺序对对数计算——归并排序
Altium Designer中从已有的PCB中导出所有元件的封装的方法
Tortoise does not display a green Icon
map,set用pari作为key值,如何定义
双击事件与单击事件的那些事
Farrowtech's wireless sensor adopts the nanobeacon Bluetooth beacon technology of orange group Microelectronics