目录
- 题目描述:
- 输入:
- 输出:
- 代码实现:
- 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;//树高}
}