【Java 刷题打卡】 刷题比玩游戏好多了,成就感越来越强,每天坚持刷几道题,每天锻炼30分钟,等8块腹肌,等大厂offer.

????

 \color{red}{~} 

那就干吧! 这个专栏都是刷的题目都是关于二叉树的,我会由浅入深、循序渐进,刷题就是这样需要连续不断的记忆--艾宾浩斯记忆法2121112。二叉树的内容不多,但是都是每个程序员必备的,对了解红黑树、B+树、LSM树都非常有帮助等等

WAL+LSM-tree实现的leveldb和rocksdb

B+ 树的mysql

(HBASE) - LSM-tree的架构把random write转成sequential write,多层的compaction和lookup,存在写放大和读放大

TokuDB索引结构--Fractal Tree

还有更多,值得咱们发掘。

leecode 102. 二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例: 二叉树:[3,9,20,null,null,15,7],

4.二叉树的层序遍历|Java 刷题打卡_Java 返回其层序遍历结果:

[ [3], [9,20], [15,7] ]


层序遍历,顾名思义,就是一层一层遍历,从上到下,从左到右。

这个时候,我们想一想用栈能实现吗?

因为栈是先进后出的,但是我们要求是层序遍历,很明显是先进先出

那么就会使用到队列这个数据结构,因为它是先进先出。

参考代码

定义一颗树

class TreeNode {
    int val;          // 头结点
    TreeNode left;    // 左子树
    TreeNode right;   // 右子树

    TreeNode(int x) {
        val = x;
    }
}


// 测试方法
 public static void main(String[] args) {
        TreeNode treeNode = new TreeNode(1);
        treeNode.left = new TreeNode(2);
        treeNode.right = new TreeNode(3);
        System.out.println("x序遍历结果 = " + preorderTraversal(treeNode));
}        
复制代码

JAVA语言版 递归

  1. 将整棵树怼进队列里。

  2. 取出这颗树,添加根节点到数组里。

  3. 取出的这棵树,如果左节点不为空,就添加道队列里,右节点不为空,也添加道队列里。

4.如果队列不为空,弹出最先进去的,添加根节点到数组里,回到第三步,直接队列里没有元素。

  1. 将根节点怼进数组。
  public static List<List<Integer>> levelOrder(TreeNode root) {
         List<List<Integer>> listList = new ArrayList<>();
         if(root == null) {
             return listList;
         }
         Queue<TreeNode> queue = new LinkedList<>();  // 练习了上面的题目,知道queue是先进先出就ok
         queue.add(root);
         while(!queue.isEmpty()) {
             int size = queue.size();
             List<Integer> list = new ArrayList<>();
             while(size > 0) {
                 TreeNode tempNode = queue.poll();
                 list.add(tempNode.val);
                 if(tempNode.left != null) {
                     queue.add(tempNode.left);
                 }
                 if(tempNode.right != null) {
                     queue.add(tempNode.right);
                 }
                 size--; // 从上到下,从左到右一个一个遍历
             }
             listList.add(list);
         }
         return listList;
     }

复制代码