当前位置: 首页 > article >正文

代码随想录算法训练营||二叉树

前/中/后序遍历

递归方式

参考文章

题目

思路:其实递归方式的前中后序遍历的方式都差不多,区别是在父节点的遍历时间。

前序代码

class Solution {
     public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        preorder(root, result);
        return result;
    }

    public void preorder(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }
        result.add(root.val);
        preorder(root.left, result);
        preorder(root.right, result);
    }
}

题目

中序代码

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        inorder(root, result);
        return result;
    }

     public void inorder(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }
        inorder(root.left, result);
        result.add(root.val);
        
        inorder(root.right, result);
    }

    
}

题目

后序代码

  public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        postorder(root, res);
        return res;
    }

    void postorder(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        postorder(root.left, list);
        postorder(root.right, list);
        list.add(root.val);             // 注意这一句
    }

层序遍历

题目

参考文章

思路:层序遍历就是把二叉树中一层一层的存储起来,这里我们用队列的方式来暂时存储每一层的元素(主要用于while循环时,size大小的固定),然后添加到一个一维数组中,最后以二维数组的方式就可以得到每一层的数据了

代码

class Solution {

    public List<List<Integer>> resList = new ArrayList<List<Integer>>();

    public List<List<Integer>> levelOrder(TreeNode root) {
        
        checkFun02(root);

        return resList;
    }

    public void checkFun02(TreeNode node) {
        if(node==null){
            return;
        }
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(node);

        while(!que.isEmpty()){
            List<Integer> itemList = new ArrayList<Integer>();
            int size = que.size();

            while(size>0){
                TreeNode tempNode=que.poll();
                itemList.add(tempNode.val);
                if(tempNode.left!=null){
                    que.offer(tempNode.left);
                }
                if(tempNode.right!=null){
                    que.offer(tempNode.right);
                }

                size--;
            }
            resList.add(itemList);   
        }
    }
}


http://www.kler.cn/a/317903.html

相关文章:

  • SAP_MM_SD_PP_FICO_视频课程几乎免费送
  • Linux第四讲:Git gdb
  • 【Hadoop实训】Hive 数据操作①
  • group_concat配置影响程序出bug
  • linux 下查看程序启动的目录
  • AcWing 300 任务安排1
  • 背景图鼠标放上去切换图片过渡效果
  • PHPMailer低版本用法(实例)
  • 深入解析Linux驱动开发中的I2C时序及I2C高频面试题
  • 前端vue-ref与document.querySelector的对比
  • 2024年9月24日---关于MyBatis框架(3)
  • Linux使用Clash,clash-for-linux
  • OpenCV多通道图像混合(六)
  • 【Linux 从基础到进阶】 QEMU 虚拟化配置与优化
  • OpenAI最新GPT-o1-preview测评
  • 关于事务的一些梳理
  • Springboot+Shiro+Mybatis+mysql实现权限安全认证
  • 深入解析:高性能 SSE 服务器的设计与实现
  • linux中crontab工具详解
  • React-Native 中使用 react-native-image-crop-picker 在华为手机上不能正常使用拍照功能
  • SQL常用技巧总结
  • ​‌GAS系统​
  • 【Kubernetes】常见面试题汇总(三十六)
  • OMRON欧姆龙通讯模块CI541V1
  • 网络安全:构建数字世界的坚固防线
  • MVCC机制解析:提升数据库并发性能的关键