题目:二叉树的最大深度
题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/
15 7
返回它的最大深度 3 。
public class MaxDepthBinaryTree {
static class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int x){
val = x;
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(3);
TreeNode t1 = new TreeNode(9);
TreeNode t2 = new TreeNode(20);
TreeNode t3 = new TreeNode(15);
TreeNode t4 = new TreeNode(7);
root.left = t1;
root.right = t2;
t2.left = t3;
t2.right = t4;
System.out.println(maxDepth(root));
}
public static int maxDepth(TreeNode root){
//递归
/*int depth = 0;
if (root !=null ){
depth = Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
return depth;*/
//层次遍历
if (root == null){
return 0;
}
int depth = 0;
//用LinkedList 来存储每层的元素
LinkedList<TreeNode> list = new LinkedList<>();
list.add(root);
while (list.size()>0){
//用count变量来存储每层元素的个数
int count = list.size();
//遍历每层元素
for (int i = 0; i < count; i++) {
TreeNode head = list.removeFirst(); //从列表删除并返回第一个元素
if (head.left != null){ //如果左孩子树
list.add(head.left);
}
if (head.right != null){
list.add(head.right);
}
}
depth++;
}
return depth;
}
}
/**
- 思路:首先判断根节点是否为空,为空直接返回0,不为空,定义一个计数器count,再构造一个空LinkedList存储每层的元素,先将头结点加进去,然后遍历每层元素,每遍历完一次。计数器加1。