题目:
104. 二叉树的最大深度
面试题55 - I. 二叉树的深度
题解:
1. 题解一:后序遍历(DFS)====> (优选)
2. 题解二:层序遍历(BFS)
3. 题解三:前序遍历(DFS)
代码:
1. 代码一:后序遍历(DFS)====> (优选)
/**
* code104
*/
public class code104 {
// 方法1:后序遍历(DFS)
public static int maxDepth(TreeNode root) {
// 递归退出条件,到叶子节点
if (root == null) {
return 0;
}
// 计算左子树最大深度
int leftMaxDepth = maxDepth(root.left);
// 计算右子树最大深度
int rightMaxDepth = maxDepth(root.right);
// 以某个节点为根节点的树的最大深度为Max
// Max = max(leftMaxDepth,rightMaxDepth)+1
return Math.max(leftMaxDepth, rightMaxDepth) + 1;
// 以上可合并为:
// return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
public static void main(String[] args) {
System.out.println("***************************************");
Integer nums[] = { 3, 9, 20, null, null, 15, 7 };
TreeNode tree = ConstructTree.constructTree(nums);
TreeOperation.show(tree);
System.out.println("***************************************");
int count = maxDepth(tree);
System.out.println("该二叉树的最大深度为: " + count);
System.out.println("***************************************");
}
}
2. 代码二:层序遍历(BFS)
/**
* code104
*/
import java.util.*;
public class code104 {
// 方法2:层序遍历(BFS)
public static int maxDepth(TreeNode root) {
if(root == null)
{
return 0;
}
int level = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty())
{
level++;
int size = queue.size();
for(int i = 0; i < size; i++)
{
TreeNode node = queue.poll();
if(node.left != null)
{
queue.offer(node.left);
}
if(node.right != null)
{
queue.offer(node.right);
}
}
}
return level;
}
public static void main(String[] args) {
System.out.println("***************************************");
Integer nums[] = { 3, 9, 20, null, null, 15, 7 };
TreeNode tree = ConstructTree.constructTree(nums);
TreeOperation.show(tree);
System.out.println("***************************************");
int count = maxDepth(tree);
System.out.println("该二叉树的最大深度为: " + count);
System.out.println("***************************************");
}
}
3. 代码三:前序遍历(DFS)
/**
* code104
*/
import java.util.*;
public class code104 {
// 方法3:前序遍历(DFS)
int max = 0;
public int maxDepth(TreeNode root) {
if(root == null)
{
return 0;
}
dfs(root, 1);
return max;
}
public void dfs(TreeNode root, int level)
{
if(root == null)
{
return;
}
if(level > max)
{
max = level;
}
dfs(root.left, level + 1);
dfs(root.right, level + 1);
}
public static void main(String[] args) {
System.out.println("***************************************");
Integer nums[] = { 3, 9, 20, null, null, 15, 7 };
TreeNode tree = ConstructTree.constructTree(nums);
TreeOperation.show(tree);
System.out.println("***************************************");
// int count = maxDepth(tree);
code104 test = new code104();
int count = test.maxDepth(tree);
System.out.println("该二叉树的最大深度为: " + count);
System.out.println("***************************************");
}
}