Minimum Depth of Binary Tree,求树的最小深度
算法分析:递归和非递归两种方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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 ; //初始值为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; } } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步