题目描述
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
第一次:2022年12月29日15:32:16
解题思路
面试题32 - I. 从上到下打印二叉树(层序遍历 BFS ,清晰图解):直接看演示图,然后自己按照题目演示的思路写一遍代码
代码展示
class Solution {
public int[] levelOrder(TreeNode root) {
// 如果当前节点是空节点
if (root == null) {
// 直接返回空数组
return new int[]{};
}
// 栈
Deque<TreeNode> stack = new ArrayDeque<>();
// 列表
List<Integer> temp = new ArrayList<>();
// 当前栈压入元素
stack.offer(root);
// 当前栈里面有元素
while (stack.size() != 0) {
// 弹出当前栈的首个元素
TreeNode cur = stack.poll();
// 数组添加上当前弹出节点的值
temp.add(cur.val);
// 弹出节点是否存在左子树
if (cur.left != null) {
// 往栈末尾存入弹出节点的左子树
stack.offer(cur.left);
}
// 弹出节点是否存在右子树
if (cur.right != null) {
// 往栈末尾存入弹出节点的右子树
stack.offer(cur.right);
}
}
// 将列表转化为需要的数组
int[] res = new int[temp.size()];
for (int i = 0; i < res.length; i++) {
res[i] = temp.get(i);
}
// 返回数组
return res;
}
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode treeNode = new TreeNode(6,
new TreeNode(2, new TreeNode(1), new TreeNode(4, new TreeNode(3), new TreeNode(5))),
new TreeNode(7, null, new TreeNode(9, new TreeNode(8), null)));
int[] ints = solution.levelOrder(treeNode);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i] + "\t");
}
}
}
相似题目
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
```java
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
// 如果当前节点是空节点
if (root == null) {
// 直接返回空数组
return new ArrayList<>();
}
// 最终返回值
List<List<Integer>> res = new ArrayList<>();
// 栈
Deque<TreeNode> stack = new ArrayDeque<>();
// 当前栈压入元素
stack.offer(root);
// 当前栈里面有元素
while (stack.size() != 0) {
// 当前栈的长度
int levelNum = stack.size();
// 每层遍历的列表:存储的是每层的结点值
List<Integer> temp = new ArrayList<>();
// 限制每次取元素的次数
for (int i = 0; i < levelNum; i++) {
//出队
TreeNode cur = stack.poll();
// 存储每层的结点值
temp.add(cur.val);
// 弹出节点是否存在左子树
if (cur.left != null) {
// 往栈末尾存入弹出节点的左子树
stack.offer(cur.left);
}
// 弹出节点是否存在右子树
if (cur.right != null) {
// 往栈末尾存入弹出节点的右子树
stack.offer(cur.right);
}
}
//把每层的结点值存储在res中,
res.add(temp);
}
// 返回
return res;
}
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode treeNode = new TreeNode(6,
new TreeNode(2, new TreeNode(1), new TreeNode(4, new TreeNode(3), new TreeNode(5))),
new TreeNode(7, null, new TreeNode(9, new TreeNode(8), null)));
List<List<Integer>> lists = solution.levelOrder(treeNode);
System.out.println(lists);
}
}