目录
- 题目描述:
- 输入:
- 输出:
- 代码实现:
- 1.深度优先搜索(递归)
- 2.广度优先搜索(队列)
题目描述:
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
输入:
root = [3,9,20,null,null,15,7]
输出:
3
代码实现:
编写树节点TreeNode
:
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.深度优先搜索(递归)
public class Main{
public static void main(String[] args) {
TreeNode root = new TreeNode(3,
new TreeNode(9), new TreeNode(20,
new TreeNode(15), new TreeNode(7)));//创建树结点
System.out.println(maxDepth(root));//3
}
/**
* 递归,深度优先搜索
*
* @param root 树的根节点
* @return 返回最大高度
*/
public static int maxDepth(TreeNode root) {
if (root == null) {
return 0;//空结点直接返回0
} else {
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
//任意结点都返回:Max(左子树高度,右子树高度)+自身高度1
}
}
}
2.广度优先搜索(队列)
import java.util.LinkedList;
import java.util.Queue;
public class Main{
public static void main(String[] args) {
TreeNode root = new TreeNode(3,
new TreeNode(9), new TreeNode(20,
new TreeNode(15), new TreeNode(7)));//创建树结点
System.out.println(maxDepth(root));//3
}
/**
* 队列实现广度优先搜索BFS
*
* @param root 树的根节点
* @return 返回最大高度
*/
public static int maxDepth(TreeNode root) {
if (root == null) {
return 0;//空结点直接返回0
}
Queue<TreeNode> queue = new LinkedList<>();//创建一个先进先出的队列
queue.offer(root);//队尾入队:根节点
int depth = 0;//深度
while (!queue.isEmpty()) {//队列为空时跳出,即所有元素都出队时
int size = queue.size();//当前队列长度:即当前每层的节点数
while (size > 0) {//遍历每一层的每一个结点
TreeNode node = queue.poll();//取对头元素 并出队
if (node.left != null) {
//当前出队元素存在左子树时
queue.offer(node.left);//则左子树结点入队
}
if (node.right != null) {
//当前出队元素存在右子树时
queue.offer(node.right);//右子树结点入队
}
size--;//遍历结点数减一
}
depth++;//层数加一
}
return depth;//树高
}
}