题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
示例:
给定二叉树
返回它的最大深度 3 。
解题思路:
我们可以使用广度优先遍历的方式,逐层遍历,每遍历一层,我们就让变量count++,最后返回count即可。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
LinkedList<TreeNode> tree = new LinkedList<TreeNode>();
int count = 0;
tree.add(root);
//判断树是否为空
while(!tree.isEmpty()){
//存放下一层节点的临时变量
LinkedList<TreeNode> temp = new LinkedList<TreeNode>();
//每遍历一层count++
count++;
//弹出每层的节点并遍历他们下层是否还有节点,如果有那么放到temp中
for(int i = tree.size(); i > 0; i--){
TreeNode node = tree.poll();
if(node.left != null) temp.add(node.left);
if(node.right != null) temp.add(node.right);
}
//让tree指向下一层节点
tree = temp;
}
return count;
}
}
力扣战绩:
当然还有更牛皮的算法。求二叉树的深度,其实就是求最长的左右子树的深度再加上根节点的1。我们利用递归的方式,一直往下遍历左右子树的节点,然后找到左右子树中深度最大的再加上1,就得到树的深度了。
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
力扣战绩: