今天是第13天刷leetcode,立个flag。
算法挑战链接
102. 二叉树的层序遍历https://leetcode.cn/problems/binary-tree-level-order-traversal/description/
第一想法
题目理解:按层次去遍历二叉树。
第一个想法是想去确认昨天的 遍历总结是否好使,链接在这里:代码随想录算法训练营之JAVA|第十二天| 二叉树的遍历_BlingZeng的博客-CSDN博客
总结了写出递归的方法,分为三步:
- 确定递归函数的参数和返回值
- 确定终止条件
- 确定单层递归的逻辑
确定递归函数的参数和返回值:这N层的节点 List<TreeNode>, 存放最终返回值的list:List<List<Integer>>
确定终止条件: 当N层为null的时候,或者节点为0个的时候。list == null || list.isEmpty()
确定单层递归的逻辑:遍历list节点,
1. 拿到值,存入数组中
2. 孩子节点,保存在节点数组种,进入下一次递归使用
于是代码就写出来了:
/**
* 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;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null){
return result;
}
//递归
process(Arrays.asList(root), result);
return result;
}
//每一层需要做的事情
private void process(List<TreeNode> list, List<List<Integer>> result) {
//判断是否不再进行递归
if (list == null || list.isEmpty()) {
return;
}
//遍历list节点的孩子节点,保存在节点数组种,进入下一次递归使用
List<TreeNode> nextList = new ArrayList<>();
List<Integer> subResult = new ArrayList<>(list.size());
for (TreeNode treeNode : list) {
subResult.add(treeNode.val);
if (treeNode.left != null) {
nextList.add(treeNode.left);
}
if (treeNode.right != null) {
nextList.add(treeNode.right);
}
}
result.add(subResult);
process(nextList,result);
}
}
看完代码随想录之后的想法
无
实现过程中遇到哪些困难
无
今日收获
验证了昨天总结写的递归三要素很有用,一套就出来了。