代码随想录算法训练营之JAVA|第十三天| 二叉树的层序遍历

今天是第13天刷leetcode,立个flag。

算法挑战链接

102. 二叉树的层序遍历icon-default.png?t=N6B9https://leetcode.cn/problems/binary-tree-level-order-traversal/description/

第一想法

题目理解:按层次去遍历二叉树。

第一个想法是想去确认昨天的 遍历总结是否好使,链接在这里:代码随想录算法训练营之JAVA|第十二天| 二叉树的遍历_BlingZeng的博客-CSDN博客

总结了写出递归的方法,分为三步:

  1. 确定递归函数的参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻辑

确定递归函数的参数和返回值:这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);
    }
}

看完代码随想录之后的想法 

实现过程中遇到哪些困难 

今日收获

验证了昨天总结写的递归三要素很有用,一套就出来了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值