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

前/中/后序遍历

递归方式

参考文章

题目

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

前序代码

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);   
        }
    }
}
相关推荐
TheSumSt20 分钟前
Python丨课程笔记Part3:语法进阶部分(控制结构与基础数据结构)
数据结构·笔记·python
长安er3 小时前
LeetCode 20/155/394/739/84/42/单调栈核心原理与经典题型全解析
数据结构·算法·leetcode·动态规划·
!停6 小时前
c语言动态申请内存
c语言·开发语言·数据结构
悟能不能悟6 小时前
list<string> 和String[],转化为jsonstr是不是一样的
数据结构·windows·list
TechNomad7 小时前
二叉堆&大根堆&小根堆的介绍和使用
数据结构
发疯幼稚鬼7 小时前
图的存储与拓扑排序
数据结构·算法·排序算法·拓扑学
LYFlied8 小时前
【每日算法】LeetCode 5. 最长回文子串(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
雪花desu8 小时前
【Hot100-Java中等】/LeetCode 128. 最长连续序列:如何打破排序思维,实现 O(N) 复杂度?
数据结构·算法·排序算法
程序员阿鹏10 小时前
如何保证写入Redis的数据不重复
java·开发语言·数据结构·数据库·redis·缓存
历程里程碑11 小时前
滑动窗口秒解LeetCode字母异位词
java·c语言·开发语言·数据结构·c++·算法·leetcode