111. Minimum Depth of Binary Tree
一、题目
1、审题
2、分析
给出一颗二叉树,求最小高度(根节点到叶节点的最短距离)。
二、解答
1、思路:
方法一、
采用 BFS 层次遍历的方法进行遍历二叉树。同时,若出现叶子节点,则返回当前高度。
public int minDepth(TreeNode root) { if(root == null) return 0; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); int min = 0; while(!queue.isEmpty()) { min++; int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); if(node.left == null && node.right == null) return min; if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); } } return min; }
方法二、
采用递归。
public int minDepth(TreeNode root) { if(root == null) return 0; if(root.left != null && root.right != null) // root 左右孩子均存在 return Math.min(minDepth(root.left), minDepth(root.right)) + 1; else // root 只有一个孩子 return Math.max(minDepth(root.left), minDepth(root.right)) + 1; }
另外
public int minDepth(TreeNode root) { if(root == null) return 0; int left = minDepth(root.left); int right = minDepth(root.right); if (left == 0 || right == 0) return left + right + 1; return Math.min(left, right) + 1; }