1. 题目描述:给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
2. 思路分析:
① 分析这道题目可以知道是对于树的遍历,常用的方法有深度优先搜索和广度优先搜索,对于求解这道题目来说可以使用深度优先搜索也可以使用广度优先搜索来求解出二叉树的高度
② 下面使用的是深度优先搜索来进行解决,要求解出树的高度,从根节点开始往下求解,遍历左子树和右子树,而左子树和右子树又可以作为当前子树的根然后继续遍历所以这个是一个递归的过程,递归下去那么最终会到达叶子节点,它的左右子树都是空的,所以返回0,所以在当前节点加上1就是当前节点的高度,然后层层返回继续递归其他的子树,最终返回到根节点那么我们就可以把整棵树的高度给计算出来了,而且使用递归的方式来进行解决的话代码量非常小
3. 下面是随便构造出来的一棵二叉树,具体的代码如下:
//https://mp.weixin.qq.com/s/Ld_pjygabfOC7KrUs-jv_g
public class Main {
static int max = 0;
public static void main(String[] args) {
//创建一颗二叉树
TreeNode<Integer> root = new TreeNode<Integer>(3);
TreeNode<Integer> l = new TreeNode<Integer>(9);
TreeNode<Integer> r = new TreeNode<Integer>(20);
TreeNode<Integer> rl = new TreeNode<Integer>(15);
TreeNode<Integer> rr = new TreeNode<Integer>(7);
TreeNode<Integer> rrl = new TreeNode<Integer>(4);
root.left = l;
root.right = r;
r.left = rl;
r.right = rr;
rr.left = rrl;
max = dfs(root);
System.out.println(max);
}
private static int dfs(TreeNode<Integer> node) {
//递归调用
if(node == null) return 0;
int leftheight = dfs(node.left);
int rightheight = dfs(node.right);
return Math.max(leftheight, rightheight) + 1;
}
private static class TreeNode<T>{
@SuppressWarnings("unused")
T value;
TreeNode<T> left;
TreeNode<T> right;
public TreeNode(T value) {
super();
this.value = value;
}
}
}