前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
首先还是一个二叉树的定义
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */
迭代的写法:
通过层序遍历,每一层遍历完就加1,最后返回这个结果就可以
这里主要解释下以下代码的含义
while(!queue.isEmpty()){ int n = queue.size(); for(int i =0;i < n; i++){ TreeNode node = queue.poll(); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } sum++; }
在最前面的时候,把根节点放入了这个队列,之后呢就到了上面的代码中。
上面的代码意思就是先获取队列的大小n(int n = queue.size();)
再往下就开始层序遍历,遍历第一层的时候又把根节点下面的左右子节点加入到了队列之中。
因为第一层就一个节点,遍历完后,直接退出for循环了,sum++,所以说现在的深度为1
但是现在while的循环还没有结束,队列现在有两个元素,又开始第二层的遍历,在遍历第二层的时候又把属于第二层的子节点加入队列.....
至此,就能轻松得到二叉树的最大深度了
class Solution { public int maxDepth(TreeNode root) { Queue<TreeNode> queue = new ArrayDeque<>(); if(root != null){ queue.add(root); } int sum = 0; while(!queue.isEmpty()){ int n = queue.size(); for(int i =0;i < n; i++){ TreeNode node = queue.poll(); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } sum++; } return sum; } }