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

前/中/后序遍历

递归方式

参考文章

题目

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

前序代码

java 复制代码
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);
    }
}

题目

中序代码

java 复制代码
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);
    }

    
}

题目

后序代码

java 复制代码
  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大小的固定),然后添加到一个一维数组中,最后以二维数组的方式就可以得到每一层的数据了

代码

java 复制代码
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);   
        }
    }
}
相关推荐
zcmodeltech1 小时前
冷链物流沙盘模型控制系统设计——基于STM32与Modbus RTU的冷藏车、冷库全流程动态展示方案
数据结构·stm32·单片机·嵌入式硬件·物联网·能源
Shan12052 小时前
经典算法题示例与详解:飞地的数量(二)
java·数据结构·算法
小七在进步5 小时前
类和对象(一)
java·数据结构·算法
charlie1145141915 小时前
浅谈C++的列表初始化std::initializer_list
开发语言·数据结构·c++·list·开源项目
一个初入编程的小白9 小时前
数据结构:二叉树链式结构的实现
数据结构
雨落在了我的手上16 小时前
Java数据结构(十一):优先级队列(堆)
数据结构
带多刺的玫瑰21 小时前
Leecode#26刷题之删除有序数组中的重复项
数据结构·算法·leetcode
洋不写bug1 天前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
化雨成烟1 天前
C++之AVL树
数据结构
wabs6661 天前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树