本文正在参加「Java主题月 - Java 刷题打卡」,详情查看<活动链接>
【Java 刷题打卡】 刷题比玩游戏好多了,成就感越来越强,每天坚持刷几道题,每天锻炼30分钟,等8块腹肌,等大厂offer.
😄
那就干吧! 这个专栏都是刷的题目都是关于二叉树的,我会由浅入深、循序渐进,刷题就是这样需要连续不断的记忆--艾宾浩斯记忆法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],
返回其层序遍历结果:
[ [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语言版 递归
-
将整棵树怼进队列里。
-
取出这颗树,添加根节点到数组里。
-
取出的这棵树,如果左节点不为空,就添加道队列里,右节点不为空,也添加道队列里。
4.如果队列不为空,弹出最先进去的,添加根节点到数组里,回到第三步,直接队列里没有元素。
- 将根节点怼进数组。
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;
}
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️