算法分析:递归和非递归两种方法。
public class MinimumDepthofBinaryTree { //递归,树的最小深度,就是它左右子树的最小深度的最小值+1 public int minDepth(TreeNode root) { if(root == null) { return 0; } int lmin = minDepth(root.left); int rmin = minDepth(root.right); if(lmin == 0 && rmin == 0) { return 1; } if(lmin == 0)//左子树为空,右子树不为空,则最小深度为右子子树的最小深度+1 { return rmin + 1; } if(rmin == 0) { return lmin + 1; } return Math.min(lmin, rmin)+1; } //非递归,按层遍历 public int minDepth2(TreeNode root) { if(root == null) { return 0; } ArrayList<TreeNode> list = new ArrayList<>(); int count = 1; list.add(root); while(!list.isEmpty()) { ArrayList<TreeNode> temp = new ArrayList<>(); for (TreeNode node : list) { if(node.left == null && node.right == null)//当节点左右子树都为空时,该节点的深度即为树的最小深度 { return count; } if(node.left != null) { temp.add(node.left); } if(node.right != null) { temp.add(node.right); } } count ++;//按层遍历,每循环一次,就是一层,层数加1 list = temp; } return count; } }
时间: 2024-11-08 01:14:40