树的最小深度
题目描述1:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
题目链接:二叉树的最小深度
树的最大深度
题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
题目链接:树的最大深度
Java题解
题目标签:二叉树
递归
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
public void printTreeNode(TreeNode node) {//先序
System.out.println(node.val);
if (node.left != null) {
printTreeNode(node.left);
}
if (node.right != null) {
printTreeNode(node.right);
}
}
}
public class GetTreeDeepth {
//最大深度
public int deepth(TreeNode node) {
if (node == null) {
return 0;
}
int left = deepth(node.left);
int right = deepth(node.right);
return (left > right ? left : right) + 1;
}
//最小深度
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
// 左孩子 或 右孩子 有一个为null,则 取不为null的值 作为 当前根的子树 的 最小深度
// 距离 如果一个树只有左子树,没有右子树,按照最小值算法,这个树的最小深度是0,显然不对
if (root.left == null || root.right == null) {
return Math.max(minDepth(root.left), minDepth(root.right)) + 1;
} else {
return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
}
}
public static void main(String[] args) {
TreeNode p = new TreeNode(1);
p.left = new TreeNode(2);
p.right = new TreeNode(3);
p.left.left = null;
p.left.right = null;
p.right.left = new TreeNode(4);
p.right.right = new TreeNode(5);
p.right.right.left = new TreeNode(6);
p.right.right.left.left = new TreeNode(8);
GetTreeDeepth t = new GetTreeDeepth();
System.out.println(t.deepth(p));
TreeNode q = new TreeNode(1);
q.left = new TreeNode(2);
q.left.left = new TreeNode(3);
System.out.println(t.minDepth(q));
}
}