本文正在参加「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 104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。
如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为
max(l,r)+1
而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。
参考代码
定义一颗树
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("xxxx结果 = " + preorderTraversal(treeNode));
}
JAVA语言版 递归
/**
* 递归解法
* @param root
* @return
*/
public static int maxDepth(TreeNode root) {
if (root == null){
return 0;
} else {
int left_depth = maxDepth(root.left);
int right_depth = maxDepth(root.right);
return Math.max(left_depth, right_depth) + 1;
}
}
JAVA语言版 迭代
/**
* 迭代解法
* @param root
* @return
* 1.pair类似于map k,v结构
* 2.不同点:stack.peek 不改变栈的值(不删除栈顶的值),pop会把栈顶的值删除。 相同点:大家都返回栈顶的值。
* 总结:left进栈,加深度(出现右节点的左子节点), right:出栈
*/
public static int maxDepthInIteration(TreeNode root) {
int depth = 0;
//1.初始化一个栈
Stack<Pair<TreeNode, Integer>> stack = new Stack<>();
TreeNode p = root;
int current_depth = 0;
while(p !=null || !stack.isEmpty()){
if(p!=null){
stack.push(new Pair(p,++ current_depth)); // 1. stack=k:1,2,3 v:1 4. stack=2,null,null 2 14.3,null,null 2
depth = Math.max(depth,current_depth); // 2. d=1 5. d=2 15. d=2
p = p.left; // 3.stack = 2,null,null 6.stack null,null,null size=2 16.null,null,null
}else{
current_depth = stack.isEmpty()? 0:stack.peek().getValue(); // 7. cd=2 10. cd=1 17.cd=2
p = stack.pop().getKey(); // 8.stack 2,null,null 11. stack 1,2,3 18.3,null,null
p = p.right; // 9. stack null,null,null 12. stack 3,null,nul 19. null,null,null 此时p=null,stack.isEmpty=true
}
}
return depth;
}
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️